【问题标题】:Checking user touched in a closed area检查在封闭区域内触摸的用户
【发布时间】:2014-02-23 19:20:37
【问题描述】:

我有一个带有曲线的 3D 世界。每条曲线只是一个 3D 点列表。 当用户点击碎石时,我想测试该点是否在封闭区域。 例如,用户绘制形成矩形的四条曲线。如果他在这个矩形内点击,我想“知道”它是一个封闭区域。

我找不到任何已知的算法 - 我怎样才能实现这种行为?

【问题讨论】:

  • 你有一些奇怪的线条(没有区域/内容)并且想要检查一个点是否“接近”它。正确的?然后定义关闭。到最近的曲线点的距离
  • 好的,我可能还不够清楚。这不是我想要的 - 我会编辑我的问题
  • 由于矩形是 2D 的:A) 全部是 2D,不包括 3D。 B) 矩形位于 3D 房间中的某个位置,如果它恰好位于两行之间,即只有一个点才“在”其中。如果将有一个平面填充该矩形,则该点仅在它接触该平面时才在其中,或者 C)如果它不接触该平面,该点也在其中。就像,矩形平面是法线方向的光源,如果点在光线中,则该点在封闭区域内。在这种情况下,如何处理表单中的非平面区域?

标签: algorithm opengl graphics


【解决方案1】:

假设您的“封闭区域”都是平面的:对于每个区域,找到拾取射线与区域平面之间的交点。然后使用奇偶交叉测试(沿着该平面中的射线)确定该点是否在该区域内。

如果您的区域不是平面的,您可以改为使用缠绕测试,将区域中每对连续点的拾取射线的符号角度相加,并查看该总和是否非零(考虑数值漂移)。

【讨论】:

  • 这将告诉我一个点是否在给定区域内。然而,我所拥有的只是曲线——我不知道该区域是封闭的。这实际上是我想要测试的。
  • 听起来你只有“积分”。形成封闭区域的点与形成开放区域的点有什么区别?任何点列表都没有定义一个(可能是非平面的)多边形吗?
  • 是多边形,但不一定是封闭多边形。
  • 多边形根据定义是闭合的。任何 3 个或更多点的序列都定义了一个封闭的多边形。只需在每两个连续点之间绘制一条线段,并从最后一个点到第一个点。
  • 你是对的 :) 我的意思是它可以只是一条 3D 折线。未关闭
猜你喜欢
  • 2012-04-18
  • 2016-10-16
  • 1970-01-01
  • 2014-02-25
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多