【发布时间】:2018-05-30 09:53:04
【问题描述】:
我想旋转一个多边形 我有这样的多边形数组 [ [-17.999999999999986, 587.25], [-14, 197.25], [544, 169.25], [554, 551.25] ]
第一步:我计算质心
function getCentroid(coord) {
var center = coord.reduce(function (x,y) {
return [x[0] + y[0]/coord.length, x[1] + y[1]/coord.length]
}, [0,0])
return center;
}
第二步:轮换:
function rotate(CX, CY, X, Y, angle) {
var rad = angle * (Math.PI / 180.0);
var nx = Math.cos(rad) * (X-CX) - Math.sin(rad) * (Y-CY) + CX;
var ny = Math.sin(rad) * (X-CX) + Math.cos(rad) * (Y-CY) + CY;
return [nx,ny];
}
问题是每次我旋转多边形时,它都会变大。 也许我的公式有问题,但很多程序员都在使用这个。
感谢您的回答。
【问题讨论】:
-
你能提供更多代码吗?完整的 HTML 和 JavaScript 代码,以便我们可以在 sn-p 中对其进行测试?
-
质心计算看起来不对。与此比较:github.com/ayamflow/polygon-centroid/blob/master/index.js
-
@RobbyCornelissen 直接除以长度而不是最后做它没有错。他的功能与您的链接中的功能相同。命名只是有点偏离。我的答案使用了第二个示例中的函数,它就像一个魅力
-
@Fuzzyma 是的,你是对的。我想我对累加器和当前值的
x和y命名感到困惑。 -
我在答案的末尾添加了一个拉皮条的版本。也许那个看起来更好
标签: javascript jquery svg svg.js