学习3D数学的第21天 | 写一个检查退化三角形的工具

故事要从5月中旬说起,项目里刚好遇到一个3D数学类的问题,就用工作外学习3D数学的时间搞起了研究,断断续续花了两周的时间,弯弯绕绕,最后发现就是个很简单的定理型问题,挺有意思的,嗯...趁着端午的尾巴记录一下吧!

目录

待解决的问题

解决办法

过程分析

优化改进


#由于项目保密,没办法提供示意图,这里就用鼠标简单绘制要表达的内容。

待解决的问题

已知一张地图里面有很多的patch片(这些patch片本质上就相当于没有厚度的brush),如图1。但有可能因为平时美术师的误操作,导致这个patch片会在merge点的时候,点与点重合成一条线,这样会造成性能的浪费,是需要避免的,如图2。我们的工具目的就是检查出这种有悬浮点的patch片

图1. 什么是patch片

图2. 错误patch片生成过程示意图

解决办法

这是很典型的检查退化三角形问题。这道题表面上是在找点与点重合,实际上可以把这个问题转述为如何找到面积为0的三角形。我们可以根据Map文件提供的信息,获知每个点的坐标,根据每个点与之相关联两个点组成的三角形,判断此三角形是否存在两边之和等于第三边的情况

如果存在,说明三点共线,三角形面积为0,则为退化三角形。不过由于这里是检查悬浮的点,那么可以不考虑片内的退化三角形,对点的范围约束在边缘就可以了。

写成python就是这个样子:

#待更新

过程分析

虽然“判断是否为退化三角形”,其实是一个图形学很常见很简单的问题。但当我们还不知道这是什么,又必须解决这类Troubleshooting问题的时候,通常,可以先从找规律找不同入手,观察是否能先从逻辑层直接解决它,对比有问题的和没问题之间有什么不同,进而找到内在规律、写出工具。所以最开始,笔者也是发现只要错误的patch片一定存在两行及以上的横轴或竖轴的点坐标一样,但是发现不能倒推回来,并不是个充要条件,走不通。

所谓的规律无法推导出结论,再从原理出发,这个问题也是同理。走了很多弯路,从判断点是否在多边形上(point in polygon问题),看到图形学中如何三角化,电脑如何绘制出三角形,发现逐渐走偏,最终通过转述问题(换种问法,找面积为0的三角形)进而找到退化三角形(degnerated triangles)这个定义。问题解决√

优化改进

本质上,还是知识不成体系,了解得不多。所以3D数学知识的学习继续推进呢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值