我正在尝试创建一个 Javascript Web 应用程序,用户在其中单击画布以放置无限量的点。有解决按钮,当点击时在点之间画线,这样所有的点都由另外两个点连接,没有线可以交叉。到目前为止,使用我的代码,在某些情况下线条仍然交叉,我无法以编程方式找出将所有点连接起来而没有任何线条交叉的逻辑。
到目前为止,我收集了所有点(XY 坐标)并将它们放入 JavaScript 对象数组中。然后,我需要对数组进行排序,使其按正确的顺序绘制。此时一切正常,除了订单并不总是满足要求。
我的问题:是否有人对一组规则有任何想法,这些规则将对这些点(XY 坐标)进行排序,以便它们都连接但从不交叉,这在每种情况下都适用?
谢谢你的帮助。
var centroid = get_polygon_centroid($points);
$points = _.sortBy($points, function(p){
var dx = p.coords.x-centroid.x;
var dy = p.coords.y-centroid.y;
return dx*dx + dy*dy;
});
$points = _.sortBy($points, function(p){
var dx = p.coords.x-centroid.x;
var dy = p.coords.y-centroid.y;
return Math.atan2(dy, dx);
});
$points.push($points[0]);