UE4 Geometry Polygon

UE4 Geometry Polygon

前人栽树,后人乘凉。

在计算几何中处理多边形的时候,经常会遇到这么一个问题,即给定多边形顶点,确定其顶点环绕顺序及计算多边面积。

多边形面积计算

UE4 Geometry Polygon_第1张图片
在直角坐标系下,找到多边形上X坐标最小的点A,以A为起点,顺时针方向,找到下一个点B,计算ABB’A’梯形的面积,梯形的高是B’ - A’,是正值。在以B为起点,计算梯形BCC’B’的面积,顺时针计算小梯形的面积,最后会回到A点(梯形HH’A’A),小梯形的面积和就是多边形的面积。注意:从E点开始,梯形的高就是负值,比如梯形EE’F’F的高是F’-E’,等价于多边形ABCDEE’A’的面积减去AHGFEE’A’的面积。

多边形环绕方向

如上所述,计算多边形面积时,顺时针计算结果为正,逆时针计算结果为负,故可以用来判断给定多边形点的环绕方向。

同时,在UE4中坐标系与常规坐标系不同,故环绕方向与常识上相反。
UE4 Geometry Polygon_第2张图片

代码示例

bool IsClockwise(const TArray<FVector>& Polygon)
{
    return PolygonArea(Polygon) < 0;
}

float PolygonArea(const TArray<FVector>& Polygon)
{
    float A = 0;
    const int32 N = Polygon.Num();

    for(int32 i = 0; i < N; ++i) {
        const auto P0 = Polygon[i];
        const auto P1 = Polygon[(i + 1) % N];
        A += (P1.X - P0.X) * (P1.Y + P0.Y); //梯形面积计算的形式
    }
    return A;
}

参考

  1. https://blog.csdn.net/shijie_nihao/article/details/99067597
  2. https://blog.csdn.net/mrbaolong/article/details/126329480?spm=1001.2014.3001.5501

你可能感兴趣的:(计算机图形学,UE4,ue4,Polygon,clockwise,Geometry)