【问题标题】:Fastest way of calculating the projection of a polygon onto a line计算多边形到直线上的投影的最快方法
【发布时间】:2014-04-13 05:13:12
【问题描述】:

最近我开始对 SAT(分离轴定理)进行一些研究,以在我正在制作的游戏中进行碰撞检测。我了解该算法的工作原理以及它的工作原理,令我感到困惑的是它如何期望人们能够如此轻松地计算形状在不同轴上的投影。

我假设多边形在向量上的投影由从点 A 到点 B 的线段表示,所以我最好的猜测是找到点 A 和 B 将找到投影到的线的角度并计算当形状旋转到投影角度时坐标的最小值和最大值 x 值(即,它平行于 x 轴,最小值和最大值只是沿 x 轴的最小值和最大值)。但是为每个投影都这样做将是一项昂贵的操作。你们中有人知道更好的解决方案吗,或者至少可以向我指出描述了更好解决方案的论文或文档?

【问题讨论】:

    标签: algorithm geometry


    【解决方案1】:

    在线计算多边形投影的简单方法是计算所有顶点在线上的投影,并按照您的建议获取具有最小值-最大值的坐标,但您不需要旋转多边形即可。

    这里是在线查找点投影的算法:-

    line : y = mx + c
    point : (x1,y1)
    
    projection is intersection of line perpendicular to given line and passing through (x1,y1)
    
    perdenicular line :- y-y1 = -1/m(x-x1)     slope of perpendicular line is -1/m
    
    y = -1/m(x-x1) + y1
    
    To find point of intersection solve the equation simultaneously :-
    
    y = mx + c , y = -1/m(x-x1) + y1
    
    mx + c = -1/m(x-x1) + y1
    
    m^2*x + mc = x1-x + my1
    
    (m^2+1)x = x1 + my1 - mc
    
    x = (x1-my1 - mc)/(m^2+1)
    y = mx + c  = m(x1-my1-mc)/(m^2+1) + c
    

    时间复杂度:对于每个顶点,它需要 O(1) 时间,所以它是 O(V) 其中V 是多边形中没有顶点

    【讨论】:

    • 如果坡度是 na 怎么办?在垂直线的情况下。
    【解决方案2】:

    如果你的多边形不是凸的,首先计算它的凸包。

    给定一个具有n 顶点的凸多边形,您可以通过二分搜索在n log n 中找到其旋转后的最小和最大x 坐标。您始终可以通过旋转比较顶点和两个相邻顶点来测试顶点是最小值还是最大值。根据比较的结果,您知道是顺时针跳还是逆时针跳。跳过k 顶点,每次将k 减半(在开始时k=n/2)。

    这可能会也可能不会带来真正的速度提升。如果你的典型多边形有十几个顶点,那么使用二分搜索可能没什么意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多