具有固定斜率和约束端点的凸多边形中的最长直线
Longest straight line in a convex polygon with fixed slope and constrained endpoints
考虑两个凸多边形 A 和 B。多边形 B 完全位于多边形 A 内。我试图找到最长的线段(具有固定斜率),使得:
- 线段的一端在多边形B的边界上,线段的另一端在多边形A的边界上
任何人都可以帮我找到那个长度的算法吗?
此外,是否可以扩展为:
- 假设您有两条斜率不同的线段(均为固定斜率),这样它们在多边形 B 上或内部具有相同的端点,而它们的其他端点(对于两条线来说将是不同的)在 A 的边界上. 如何最大化它们的长度之和?
- 更高维度的多胞体/多边形?
旋转多边形,使坡度水平(实际上,使用矢量数学隐式执行此操作)。所需线段的端点位于 A 的顶点或 B 的顶点(否则我们可以通过向上或向下扰动其位置来延长线段)。
获得A的左壳和B的右壳。我们通过对A的顶点与B的顶点进行排序合并来模拟从下到上扫过的线。在每个顶点处,确定水平长度,这将由连接该船体上的前一个顶点与下一个顶点的线段的方程式确定。
首先,您需要认识到连接线段永远不会在 A 和 B 的边的中间结束。
如果是这样,并且 A 和 B 的边不平行,那么单向移动总是会导致更长的连接线段。如果A和B的边是平行的,你可以双向移动找到等长的连接线段,直到到达一个顶点,所以总会有一个以顶点结束的最大长度解。
这将潜在连接线段的列表减少为以顶点结束的线段。
因此,对于 A 的每个顶点,找到与 B 相交的给定斜率直线上的(最多)两点,并选择距离最远的点(如果有)。即为候选线段。
对B的每个顶点做同样的事情,定位线穿过A的点。
现在 select 所有候选人中最长的线段。
请注意,以上内容也适用于凹多边形。从一个多边形的顶点开始的线与另一个多边形的边相交的地方只会有两个以上的点。
考虑两个凸多边形 A 和 B。多边形 B 完全位于多边形 A 内。我试图找到最长的线段(具有固定斜率),使得:
- 线段的一端在多边形B的边界上,线段的另一端在多边形A的边界上
任何人都可以帮我找到那个长度的算法吗?
此外,是否可以扩展为:
- 假设您有两条斜率不同的线段(均为固定斜率),这样它们在多边形 B 上或内部具有相同的端点,而它们的其他端点(对于两条线来说将是不同的)在 A 的边界上. 如何最大化它们的长度之和?
- 更高维度的多胞体/多边形?
旋转多边形,使坡度水平(实际上,使用矢量数学隐式执行此操作)。所需线段的端点位于 A 的顶点或 B 的顶点(否则我们可以通过向上或向下扰动其位置来延长线段)。
获得A的左壳和B的右壳。我们通过对A的顶点与B的顶点进行排序合并来模拟从下到上扫过的线。在每个顶点处,确定水平长度,这将由连接该船体上的前一个顶点与下一个顶点的线段的方程式确定。
首先,您需要认识到连接线段永远不会在 A 和 B 的边的中间结束。
如果是这样,并且 A 和 B 的边不平行,那么单向移动总是会导致更长的连接线段。如果A和B的边是平行的,你可以双向移动找到等长的连接线段,直到到达一个顶点,所以总会有一个以顶点结束的最大长度解。
这将潜在连接线段的列表减少为以顶点结束的线段。
因此,对于 A 的每个顶点,找到与 B 相交的给定斜率直线上的(最多)两点,并选择距离最远的点(如果有)。即为候选线段。
对B的每个顶点做同样的事情,定位线穿过A的点。
现在 select 所有候选人中最长的线段。
请注意,以上内容也适用于凹多边形。从一个多边形的顶点开始的线与另一个多边形的边相交的地方只会有两个以上的点。