【问题标题】:segment-polygon intersection线段-多边形相交
【发布时间】:2010-09-18 16:09:18
【问题描述】:

您好,

我想检测一个线段是否只“接触”一个多边形或穿过它。

人物

解释了我的疑问。如何知道案例A和B之间的区别? 请注意,在这两种情况下,红线在两个顶点处穿过多边形,一个与外部接触,另一个与内部交叉。我有一个段-段相交算法,但我不知道如何正确使用它。任何帮助表示赞赏。

【问题讨论】:

  • 你的多边形总是简单的还是复杂的?
  • 没有自相交边的凹多边形。可能存在漏洞。
  • 不确定您是否还有问题。您对 O'Rourke 教授回答的评论似乎表明您没有,但您还没有接受他的回答(还)。

标签: computational-geometry


【解决方案1】:

我认为可能没有比在低级别计算细节更容易的方法了。 首先,您需要健壮的代码来计算两个段之间的交集。 这是讨论(与代码)here。一旦你有了交点,你需要 计算多边形边界如何与那些邻域中的线段交互 交点。这本质上是 使用我书中的符号重复LeftOf( ) 计算。 在您的图像中,该段通过顶点 b,而相邻的顶点 ac (在连续序列中 (a,b,c))都在 b 的同一侧。因此,该段 不会渗透到 b 附近的多边形内部。但是如果 ac 位于线段的相对两侧,那么它必须穿透。

【讨论】:

  • 非常感谢奥罗克教授。当线段在顶点与多边形相交时,“LeftOf”背后的想法解决了这个问题。
【解决方案2】:

概括地说,一个交叉点可能包含许多点。例如,参见http://cagd.cs.byu.edu/~557/text/ch7.pdf,它讨论了平面曲线如何相交,并说切线曲线在“正确计数”的两个点处相交,这是违反直觉的。在带有放牧线的凸多边形的情况下,交叉点是否“正确计算”了两个点?在您的情况下,是否有两个交叉点,每个交叉点都有两个点?

因此,O'Rourke 教授给出了一种计算交叉点数的算法,可以这么说。务实地,计算交叉点的包是否应该返回每个交叉点的点数?

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 2011-08-30
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2012-08-25
    • 2012-01-15
    相关资源
    最近更新 更多