天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 141|回复: 0

C++ UE4 将凸多边形通过最优解拆分为多个三角形

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-3-2 20:51:12 | 显示全部楼层 |阅读模式
    1. //        计算凸多边形的最优三角形切分
    2. void MinWeightTriangulation(const TArray<FVector>& arr, TArray<int>& ArrTriangle)
    3. {
    4.         if (arr.Num() < 3)
    5.                 return;
    6.         float** t = new float* [arr.Num()];
    7.         int** s = new int* [arr.Num()];
    8.         memset(t, 0, sizeof(float*) * arr.Num());
    9.         memset(s, 0, sizeof(int*) * arr.Num());
    10.         for (int idx = 0; idx < arr.Num(); idx++)
    11.         {
    12.                 t[idx] = new float[arr.Num()];
    13.                 s[idx] = new int[arr.Num()];
    14.                 memset(t[idx], 0, sizeof(float) * arr.Num());
    15.                 memset(s[idx], 0, sizeof(int) * arr.Num());
    16.         }
    17.         int j;
    18.         for (int len = 2; len <= arr.Num() - 1; len++)
    19.         {
    20.                 for (int i = 1; i <= arr.Num() - len; i++)
    21.                 {
    22.                         j = i + len - 1;
    23.                         t[i][j] = 0xFFFFFFF;
    24.                         for (int k = i; k <= j - 1; k++)
    25.                         {
    26.                                 float q = t[i][k] + t[k + 1][j] + calweight(arr[i - 1], arr[k], arr[j]);
    27.                                 if (q < t[i][j])
    28.                                 {
    29.                                         t[i][j] = q;
    30.                                         s[i][j] = k;
    31.                                 }
    32.                         }
    33.                 }
    34.         }
    35.         outTringle(1, arr.Num() - 1, s, ArrTriangle);
    36.         for (int idx = 0; idx < arr.Num(); idx++)
    37.         {
    38.                 delete[] t[idx];
    39.                 delete[] s[idx];
    40.         }
    41.         delete t;
    42.         delete s;
    43. }
    44. float calweight(FVector a, FVector b, FVector c)
    45. {
    46.         float x = (a - b).SizeSquared2D();
    47.         float y = (a - c).SizeSquared2D();
    48.         float z = (b - c).SizeSquared2D();
    49.         return x + y + z;
    50. }
    51. void outTringle(int i, int j, int** s, TArray<int>& trignles)
    52. {
    53.         if (i == j)
    54.                 return;
    55.         outTringle(i, s[i][j], s, trignles);
    56.         outTringle(s[i][j] + 1, j, s, trignles);
    57.         trignles.Add(i - 1);
    58.         trignles.Add(s[i][j]);
    59.         trignles.Add(j);
    60. }
    复制代码

     

     

     

     

    C++ UE4 将凸多边形通过最优解拆分为多个三角形
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 10:30 , Processed in 0.137220 second(s), 26 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表