我有一个点(纬度/经度)和一个以度数为单位的航向(真北),该点正沿着该点移动。我有许多静止的多边形(点在纬度/经度中定义),它们可能是凸面的,也可能不是凸面的。
我的问题是,如何计算与多边形最近的交点(如果有)。我看过一些关于光线追踪的令人困惑的帖子,但是当光线和多边形不在同一个平面上并且多边形必须是凸面时,它们似乎都与 3D 有关。
我有一个点(纬度/经度)和一个以度数为单位的航向(真北),该点正沿着该点移动。我有许多静止的多边形(点在纬度/经度中定义),它们可能是凸面的,也可能不是凸面的。
我的问题是,如何计算与多边形最近的交点(如果有)。我看过一些关于光线追踪的令人困惑的帖子,但是当光线和多边形不在同一个平面上并且多边形必须是凸面时,它们似乎都与 3D 有关。
听起来你应该能够做一个简单的二维线交叉点......
但是,我之前曾与 Lat/Long 合作过,并且知道它们并不完全适用于任何 2d 坐标系。
我会从一个通用的“IsPointInPolygon”函数开始,你可以通过谷歌搜索找到一百万个,然后在你的多边形上测试它,看看它有多好用。如果它们足够准确,请使用它。但有可能由于纬度/经度坐标的非正方形性质,您可能必须使用球面几何进行一些修改。
在 2D 中,计算相当简单......
您总是可以首先检查以确保光线的端点不在多边形内(因为在这种情况下那是交点)。
如果端点不在直线上,您可以与多边形的每个边界特征进行射线/线段相交,并使用最近找到的位置。处理凸/凹特征等。
使用此技术计算光线是否与多边形中的每个线段相交。
(我接受的)答案(我称之为h
)中产生的比例因子是“相交点沿射线有多远”。您正在寻找 和 之间的0
值1
。
如果有多个交叉点,那很好!如果您想要“第一个”,请使用具有最小值的那个h
。
此页面上的答案似乎是最准确的。