逐点插入法生成维诺图

  最近想生成维诺图,在博客园发现了一篇对其生成过程描述得非常详细的帖子,链接在此感谢作者分享(维诺图(voronoi图) - kongbursi - 博客园)。

  此篇随笔用于记录在使用逐点插入法生成维诺图过程中文章中没有提到的细节,以及一些遗留问题。(此次使用Unity引擎)

附上一张生成的图, 红线为维诺图, 黄线为三角网:

 

一、编写代码中的细节

  1. 旧的三角形分裂成多个新三角形时,需要将各个删除的原三角形各点,围绕当前点,顺时针或逆时针排序后,再依次两两一组与当前点形成新的三角形。
  2. 插入最后一个点时,分裂成的所有新三角形以及暂存表中剩余的所有三角形,都是Delaunay三角形,全部加入Delaunay三角网中。
  3. 生成维诺图时,若三角形ABC的边AB没有共边三角形,则需要求边AB中垂线f与维诺图边界的交点, 此时交点一般会有两个,取与点C在边AB异侧的点D,连接点D与三角形ABC的外接圆圆心。
  4. 连接外接圆圆心生成维诺图时,需要根据两外接圆是否在维诺图边界内,进行分情况讨论。若两者都在范围内,直接连接;若其中之一在范围外,截取连线范围内部分;若两者均在范围外,不需要连接。

二、遗留问题

  1. 坐标原点是(0,0,0),使用下面数据(-1.8, -0.8, 0)(-0.7, -1.7, 0)(0.5, -2, 0)(2.4, -2.2, 0),生成Delaunay三角网时仍然会出现单独的点,没有生成三角形的情况(就和上面链接中作者遇到的情况一样)。个人猜测是在范围内的点不够密集导致的。希望各位网友可以帮忙解惑。

  

posted @ 2024-11-04 22:53  HithertoUnknown  阅读(101)  评论(0)    收藏  举报