Algorithm 球面上的光线多边形交点

Algorithm 球面上的光线多边形交点,algorithm,2d,polygon,raytracing,Algorithm,2d,Polygon,Raytracing,我有一个点(纬度/经度)和一个以度为单位的航向(正北),这一点就是沿着它移动的。我有许多固定多边形(点定义在Lat/Lon中),它们可能是凸的,也可能不是凸的 我的问题是,如何计算与多边形最近的交点(如果有)。我看到过一些关于光线跟踪的令人困惑的帖子,但它们似乎都与3D有关,因为光线和多边形不在同一平面上,而且多边形必须是凸的。听起来你应该能够做一个简单的2d直线相交 然而,我很久以前就使用过Lat/并且知道它们并不完全适用于任何二维坐标系 我会从一个通用的“IsPointInPolygon”函

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


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

听起来你应该能够做一个简单的2d直线相交

然而,我很久以前就使用过Lat/并且知道它们并不完全适用于任何二维坐标系


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

在二维中,计算相当简单

您可以始终通过检查确保光线的端点不在多边形内开始(因为在这种情况下,这是交点)


如果端点超出直线,则可以与多边形的每个边界特征进行光线/线段相交,并使用找到的最近位置。用于处理凸面/凹面特征等。

计算光线是否与多边形中的每条线段相交

(我接受的)答案(我称之为
h
)中的结果比例因子是“射线的交点有多远”。您正在查找
0
1
之间的值


如果有多个交点,那就好了!如果您想要“第一个”,请使用最小值为
h

的选项,本页上的答案似乎是最准确的


您是在球体表面上工作,还是仅在平面二维平面上工作?我使用的是Lat/Lon,但我可以轻松转换为笛卡尔坐标系,我假设它是平面二维平面。不幸的是,它不是。Lat/Lon和笛卡尔坐标之间的转换变得非常混乱。这不是一个简单的从一个到另一个的映射。无论如何,有趣的问题。。。我必须考虑一下:)PS:你得到了很多答案,这些答案只涉及普通的二维几何体。你可能想清楚地表明你正在处理一个球体的表面。关于Lat/Long的评论很有道理!将所有点重新投影到特定位置的更好坐标系中(即:UTM)我已经实现了缠绕点来检查一个点是否在多边形内部,但我不知道如何使用它来查看光线是否与多边形相交。如果只给定光线的起点和方向,如何计算光线的端点?我是否需要使用边界框来表示多边形?+1,即使我跳过了第一步。这有什么意义?计算光线的点是否在多边形内,几乎和找到最近的交点一样困难……未知,他指的是起点。根据定义,光线只有一个端点。索尔:他想要交点。如果起点在多边形内部,则需要捕捉该点,因为交点==起点。如果位于多边形外部,则为光线段交点。未知:我指的是光线的起点好的,我有几个多边形和一条可能会经常更新的光线。计算每个多边形中每条直线的光线/直线交点,然后取最近的交点非常有效吗?好的,那么我认为a是我的光线原点,E是我的方向向量?如果是这样的话,我仍然不知道我将如何使用Lat/Lon,并将我的航向转换为向量。