|
楼主 |
发表于 2024-8-19 15:16
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
5、背向观察者面不显示
前面发的说明都是以线段连接各点组成图形,所以没办法做面着色等处理,也不需要考虑背向观察者面不显示。
接下来要做面着色,那就要用到EXCEL的绘制多边形功能了,多边形可以设置填充色,可满足基本的面着色的需求。
为了节约电脑算力提高处理速度,就需要考虑背向观察者面不显示的功能。可以用一张纸或者卡片来考虑,
定义一个正面,定义左上角为1,右上角为2,右下角为3,左下角为4,4个点按顺时针排列,在它背向观察者时,可以
看到4个点变成逆时针排列了,不管怎么旋转翻转,背向观察者时4个点肯定呈相反的顺序。
根据这个结果,在绘制多边形前先判断一下该多边形各点(实际只要判断3个连续点就行)是否呈顺时针排列,不是的话就取消绘制,这样就完成了背向观察者面不显示的功能。我将是否顺时针顺序的判断做成了自定义函数
实际上计算也很简单,但过程挺艰辛,吃了数学不好的苦。
- <p>Function getClockwise(p1, p2, p3) As Boolean</p><p>If (p2(0) - p1(0)) * (p3(1) - p2(1)) - (p2(1) - p1(1)) * (p3(0) - p2(0)) > 0 Then getClockwise = True</p><p>End Function</p>
复制代码
参数p1, p2, p3为3个连续点坐标,格式为(x,y,z),一维数组。
|
|