【问题标题】:finding all triangles from an array of lines (Delaunay diagram)从线数组中找到所有三角形(德劳内图)
【发布时间】:2018-01-20 04:54:07
【问题描述】:

我在处理过程中使用 Mesh 库来创建基于点数组的三角形网格。 我的问题是这个库只能返回组成三角形的线数组,而不是三角形本身。 有谁知道如何得到所有的三角形?

图书馆在这里:http://leebyron.com/mesh/

and here's a picture for refrence

【问题讨论】:

  • 您是否尝试过使用谷歌搜索“将一组线转换为三角形”以找到可能对您有所帮助的算法?当你尝试它们时发生了什么?
  • 我找不到任何不会永远花费的东西......
  • 我可能想要一个不同的库
  • 要求我们推荐一个库的问题对于 Stack Overflow 来说是题外话。我建议将尝试某事所需的时间与等待答案所花费的时间进行比较。很难回答一般的“我该怎么做”类型的问题。如果你尝试一些东西并发布一个特定的“我试过 X,预期 Y,但得到了 Z”类型的问题,你会有更好的运气。所以我建议你尝试一些事情并发布一个更具体的问题,这样你就更有可能得到答案。

标签: arrays grid processing mesh delaunay


【解决方案1】:

好问题。首先,解决方案是采用可以为您提供所需格式的库。你需要 Delaunay 三角剖分不是 Delaunay 图,这个库提供了什么。

可以从提供的结果库中获取三角形非常简单。如果内图点有n 边缘(getLinked() 方法),而不是n 三角形的一部分。三角形的其他边由下式计算 按角度排序边缘。如果点在外部(在凸包上),则一对边之间的角度更大 大于 180 度,并且该对三角形不存在。

算法是这样的:

for each point p1:
  neighbours = delaunay.getLinked(p1)
  sort neighbours by angle to point p1
  for i=0 to size(neighbours)
    p2 = neighbours[i]
    p3 = neighbours[(i+1) % size(neighbours)]
    if (angle(p3, p1) - angle(p2, p1)) % 360deg > 180deg:
      continue  # Outer triangle
    if p2 > p1 and p3 > p1:
      continue  # Already processed
    print result triangle (p1, p2, p3)

check (p2, p3 > p1) 就是去掉相同的三角形,因为每个三角形产生了3次。

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 2015-08-29
    • 2021-08-24
    • 2014-03-24
    • 2018-10-14
    • 1970-01-01
    • 2012-05-06
    • 2012-04-27
    • 1970-01-01
    相关资源
    最近更新 更多