Javascript 检测点是在raphael.js形状的内部还是外部

Javascript 检测点是在raphael.js形状的内部还是外部,javascript,svg,collision-detection,raphael,Javascript,Svg,Collision Detection,Raphael,我有一个raphael.js形状,我正在上面画圆圈。我只希望在圆未脱离其所绘制形状的边界时显示圆 为了更清楚地说明这一点,以下是我不希望发生的事情的一个例子: 我不希望灰色区域之外的圆圈出现。如何检测圆是在灰色形状内还是在灰色形状外?确定点是否在闭合路径内的一种可能方法是: 选择绝对位于形状外部的坐标 从这一点到你的实际问题点划一条线 计数,线与路径相交的频率 如果交点的数目是奇数,那么你的点在里面。如果是偶数,那么重点就在外面 我不知道这是否对你有很大帮助,因为我根本不认识raphael.j

我有一个raphael.js形状,我正在上面画圆圈。我只希望在圆未脱离其所绘制形状的边界时显示圆

为了更清楚地说明这一点,以下是我不希望发生的事情的一个例子:


我不希望灰色区域之外的圆圈出现。如何检测圆是在灰色形状内还是在灰色形状外?

确定点是否在闭合路径内的一种可能方法是:

  • 选择绝对位于形状外部的坐标
  • 从这一点到你的实际问题点划一条线
  • 计数,线与路径相交的频率
  • 如果交点的数目是奇数,那么你的点在里面。如果是偶数,那么重点就在外面

  • 我不知道这是否对你有很大帮助,因为我根本不认识raphael.js。但这是解决问题的有效几何方法。

    您可以在包含圆的组(
    元素)上应用剪辑路径(该路径应定义为示例中的灰色形状)


    有关如何使用剪辑路径的信息,请参见中的。

    这看起来非常类似于“”


    您只需在圆的位置上调用getIntersectionList(),看看它是否返回大灰色形状。

    谢谢,这似乎是一个可靠的解决方案,但根据引用的博文,Firefox/Safari尚未正确支持这一点,这是我的一项要求。我应该在我的原始帖子中提到这一点。也许我有点误解,但我在他的博客帖子中尝试了这个例子,它在Firefox、Safari和Chrome中运行得很好。啊,我只是根据帖子中的文字说Safari或Firefox不支持它,但这个例子似乎对我也适用。我必须检查一下,因为它看起来比面具更坚固。谢谢不,这个例子不起作用(至少在我测试的Firefox3.6上是这样)。当鼠标移动时,它似乎只是通过显示元素ID来工作,但这不是通过
    getIntersectionList()
    实现的。使用Firebug时,您将看到一条错误消息,该消息不支持
    getIntersectionList()
    。这是有效的,但我必须破解raphael.js才能很好地使用它。Raphael.js只支持矩形,所以我对代码做了一些调整。有关更多信息,请参阅。注意。我知道这是一个可怕的修复,但它是有效的,现在这就是我所关心的。有趣的:)如何计算交互?有命令吗?或者你必须自己做?对不起,你必须自己做。我刚刚描述了数学概念,我正在PhotoshopJSX(javascript中的Photoshop脚本语言)中实现它。我试图弄清楚一个点是否在路径中,Photoshop为我提供了一个路径的子路径项,该路径是一个用于一条路径的向量数组。我在数组中循环,检查相交数是否为偶数。我不知道如何在Raphael中实现htis,但是如果您可以单独获得路径的每个向量,您也可以这样做。