【问题标题】:Ray-Polygon Intersection Point on the surface of a sphere球体表面上的射线-多边形交点
【发布时间】:2010-10-12 07:35:16
【问题描述】:

我有一个点(纬度/经度)和一个以度数为单位的航向(真北),该点正沿着该点移动。我有许多固定的多边形(点在纬度/经度中定义),它们可能是凸面的,也可能不是凸面的。

我的问题是,如何计算与多边形最近的交点(如果有)。我看过一些关于光线追踪的令人困惑的帖子,但当光线和多边形不在同一个平面上并且多边形必须是凸面时,它们似乎都与 3D 相关。

【问题讨论】:

  • 您是在球体表面上工作,还是仅在平面 2D 平面上工作?
  • 我正在使用纬度/经度,但我可以轻松转换为笛卡尔坐标,我认为这是一个平面 2D 平面。
  • 不幸的是,事实并非如此。 Lat/Lon 和笛卡尔之间的转换变得非常混乱。这不是从一个到另一个的简单映射。
  • 无论如何,有趣的问题...我得考虑一下 :)
  • PS:你得到了很多只处理普通二维几何的答案。您可能想明确表示您正在处理球体的表面。

标签: algorithm 2d polygon raytracing


【解决方案1】:

听起来你应该能够做一个简单的二维线交叉...

但是,我之前使用过 Lat/Long,并且知道它们并不完全适用于任何 2d 坐标系。

我会从一个通用的“IsPointInPolygon”函数开始,你可以通过谷歌搜索找到一百万个,然后在你的多边形上测试它,看看它的效果如何。如果它们足够准确,请使用它。但有可能由于纬度/经度坐标的非正方形性质,您可能需要使用球面几何进行一些修改。

【讨论】:

  • 关于纬度/经度评论的好点!为了准确,需要将所有点重新投影到特定位置(即:UTM)的更好坐标系中。
  • 我已经实现了 Winding Point 来检查一个点是否在多边形内部,但我不知道如何使用它来查看光线是否与多边形相交。
【解决方案2】:

在 2D 中,计算相当简单...

您总是可以首先检查以确保光线的端点不在多边形内(因为在这种情况下那是交点)。

如果端点不在直线上,您可以与多边形的每个边界要素进行射线/线段相交,并使用找到的最近位置。处理凸/凹特征等。

【讨论】:

  • 如何计算仅给定起点和方向的射线的端点?我是否必须以某种方式为多边形使用边界框?
  • +1 即使我只是跳过第一步。它有什么意义?计算光线的点是否在多边形内与找到最近的交点一样难......
  • 未知,他的意思是起点。根据定义,一条射线只有一个端点......
  • Sol:他想要交点。如果起点在多边形内,则需要捕获它,因为交点 == 起点。如果它在多边形之外,则它是射线段的交点。未知:我指的是射线的起点。 ;)
  • 好的,我有几个多边形和一个可能会经常更新的射线。为每个多边形中的每条线计算射线/线交点然后取最近的交点是否非常有效?
【解决方案3】:

计算光线是否与多边形using this technique 中的每个线段相交。

(我接受的)答案(我称之为h)中产生的比例因子是“相交点沿射线有多远”。您正在寻找介于 01 之间的值。

如果有多个交叉点,那很好!如果您想要“第一个”,请使用具有最小值 h 的那个。

【讨论】:

  • 好的,所以我认为 A 是我的光线原点,E 是我的方向向量?如果是这样,我仍然很困惑如何使用 Lat/Lon 并将我的标题转换为矢量。
【解决方案4】:

此页面上的答案似乎是最准确的。

Question 1.E GodeGuru

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2016-11-06
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多