Svg Raphael js-绘制无交点的路径

Svg Raphael js-绘制无交点的路径,svg,raphael,intersection,Svg,Raphael,Intersection,我使用svg库raphaeljs绘制多边形。我是这样做的: path.attr({path: " M 301 248 613 283 588 533 370 497 232 382 232 382 Z "}) 用户单击画布上的某个位置,然后我根据新点的坐标重新绘制多边形。是否可以拒绝一个多边形中直线之间的交点? 更新:您可以尝试作为一个例子。我不想允许自我交叉。可以找到源代码。为了避免自交多边形,您所要做的就是检查要添加的线段是否与多边形中的任何其他线段相交 因此,只需添加一个测线交点测试,并

我使用svg库raphaeljs绘制多边形。我是这样做的:

path.attr({path: "
M 301 248 613 283 588 533 370 497 232 382 232 382 Z
"})
用户单击画布上的某个位置,然后我根据新点的坐标重新绘制多边形。是否可以拒绝一个多边形中直线之间的交点?
更新:您可以尝试作为一个例子。我不想允许自我交叉。可以找到源代码。

为了避免自交多边形,您所要做的就是检查要添加的线段是否与多边形中的任何其他线段相交

因此,只需添加一个测线交点测试,并根据之前的所有线段检查最新线段


您可以在web上搜索直线交点测试的算法。找到它不会有困难。

我只是想知道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);
}

你是说自相交吗?如果你能提供一个详细的信息,那会很有帮助。@PaulLeBeau我添加了更多的细节。是的,自我介绍。