我使用svg库 raphaeljs 来绘制多边形。我是这样做的:
path.attr({path: "
M 301 248 613 283 588 533 370 497 232 382 232 382 Z
"})
用户在某个地方点击画布,然后根据新点的坐标重绘多边形。是否可以拒绝一个多边形中的线之间的交叉点?
更新:您可以尝试使用this作为示例。我不想让自我交叉。可以找到源代码here。
答案 0 :(得分:1)
为了避免自相交多边形,当然要做的就是检查您要添加的线段是否与多边形中的任何其他线段不相交。
因此,只需添加一个行相交测试并检查最新的段与之前的所有段。
您可以在网上搜索线路交叉点测试的算法。你找不到它。
答案 1 :(得分:0)
我只是想知道Raphael是否有一些嵌入功能来查找线段之间的交叉点。最后,我基于向量的乘法使用了这种方法:
function intersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2){
var v1 = (bx2-bx1)*(ay1-by1)-(by2-by1)*(ax1-bx1);
var v2 = (bx2-bx1)*(ay2-by1)-(by2-by1)*(ax2-bx1);
var v3 = (ax2-ax1)*(by1-ay1)-(ay2-ay1)*(bx1-ax1);
var v4 = (ax2-ax1)*(by2-ay1)-(ay2-ay1)*(bx2-ax1);
return (v1*v2<0) && (v3*v4<0);
}