一个三角化多边形的问题?

czmissyou 2004-12-06 08:58:32
在做三角网简化的时候,遇到这么一些多边形,其中有三到四个点的x坐标或y坐标相等,说白了,就是这几个点在同一直线上(在xy平面上)。

我原来三角化多边形的算法如下:
1) 用单向循环链表保存多边形顶点,并计算这个链表中每一个顶点的凸凹性。
2) 在循环链表中顺序取三个结点P、Q、R ,如果Q 为凸点,并且由P、Q、R 所构成的三角形PQR不包含多边形上其他顶点,则计算△PQR 的特征角(三角形内最小的角)。求出所有这样的三角形,从中选择特征角最大的△PQR ,保存该三角形,并从链表中删去结点Q。
3) 如果链表中不存在三个以上顶点,则转步骤2)。
4) 由链表中的最后三个顶点构成一个三角形。

很容易就只剩下在同一直线上的几个点了,根本就无法三角化下去。大家提些改进意见。
...全文
165 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
czmissyou 2004-12-28
  • 打赏
  • 举报
回复
3x ALL.
我结贴了。

采用 happy__888([顾问团]寻开心) 的思想,成功实现,THanks.
寻开心 2004-12-09
  • 打赏
  • 举报
回复
按照算法所描述,正常情况下你每次获得的可以摘除的pqr三角形不会是三点共线的退化三角形
因为这种退化三角形的特征角是0,
当真遇到了这种情况的时候,说明多边形当中存在大量的共线点
这个时候需要的操作应该是删除共线点的中间点了
就是你的算法调整一下
1)不变
2)不变
3)整理剩余的顶点,剔除共线点
4)顶点数目多于3,转2
5)最后三个形成三角形输出并且退出
mxfeng 2004-12-08
  • 打赏
  • 举报
回复
大概是直线上的优先!
czmissyou 2004-12-08
  • 打赏
  • 举报
回复
把c点作内点是以只有三个点在同一直线上为前提。

随便你调整链表,总会有时候,只剩下几个在同一直线上的点。唉,都没有理解透。
mxfeng 2004-12-08
  • 打赏
  • 举报
回复
也可以调整链表,让((其中有三到四个点的x坐标或y坐标相等,说白了,就是这几个点在同一直线上(在xy平面上))) 这些点分布在链表连续区域。问题同样解决。而且不用该程序。
mxfeng 2004-12-08
  • 打赏
  • 举报
回复
把c点看作内点,然后再看 zzwu(未名) 的回复。
问题解决
czmissyou 2004-12-07
  • 打赏
  • 举报
回复
大哥,哪有什么内点.

就是一个多边形的三角剖分。
现在出现了一个特殊情况,形如:
a -----b
| . . . \
| . . . .\
|. . . . .\
c . . . . .d
|. . . . ./
|. . . . /
e------ f

在执行2、3步骤时,很有可能首先把bdf从链表中删除了,只剩下ace三个在一条直线上的点,那就不能组成一个三角形了。
mxfeng 2004-12-07
  • 打赏
  • 举报
回复
恩,明白了,
zzwu 2004-12-07
  • 打赏
  • 举报
回复


凸多边形显然容易,找出一个内点,连到各顶点就行了,如:
a -----b
| . . . \
| . . . .\
|. . . . .\
c . .P . ..d
|. . . . ./
|. . . . /
e------ f

非凸多边形,则可以寻找凹进的顶点,连到其它凸的顶点,来分为凸多边形,
然后再三角化.



mxfeng 2004-12-07
  • 打赏
  • 举报
回复
a
. .
. .
.
c d . . . e
. .
. .
f . . . g
是不是这样啊?看出来了,c.y=d.y=e.y
这样的点中一定有点是凹点啊,不可能都是凸点。
mxfeng 2004-12-07
  • 打赏
  • 举报
回复
a
. .
. .
.
c d . . . e
. .
. .
f . . . g
是不是这样啊?
mxfeng 2004-12-07
  • 打赏
  • 举报
回复
不懂啊,大概是直线上的优先吧

4,447

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧