作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定 JavaScript 中的顶点,如何找到凹不规则多边形的质心?
我想将一组 x,y 点传递给 JavaScript 函数并获得一个 x,y 点。
var my_points = [{x:3,y:1},{x:5,y:8},{x:2,y:9}];
function get_polygon_centroid(points){
// answer
}
var my_centroid = get_polygon_centroid(my_points);
my_points
变量只应该表示要给出的点的格式,
不代表要给出的具体点数 .
最佳答案
对于 2D 表面的质心(这可能是您需要的),
最好从 a little bit of maths 开始.
我在这里将其改编为您自己的符号:
function get_polygon_centroid(pts) {
var first = pts[0], last = pts[pts.length-1];
if (first.x != last.x || first.y != last.y) pts.push(first);
var twicearea=0,
x=0, y=0,
nPts = pts.length,
p1, p2, f;
for ( var i=0, j=nPts-1 ; i<nPts ; j=i++ ) {
p1 = pts[i]; p2 = pts[j];
f = p1.x*p2.y - p2.x*p1.y;
twicearea += f;
x += ( p1.x + p2.x ) * f;
y += ( p1.y + p2.y ) * f;
}
f = twicearea * 3;
return { x:x/f, y:y/f };
}
关于javascript - 如何在 JavaScript 中找到凹不规则多边形的质心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692448/
我是一名优秀的程序员,十分优秀!