谢谢
但是存储的位置坐标都是浮点值,实际在程序里算出来两个向量都是float格式,数值是近似出来的,可能在数学上不一定完全平行吧?可能会差一点点。会有这种情况吗?这时候如何处理呢,只要是二者叉积结果小于一定的阈值就判定是平行的?前面 @sjtuDNA 也这样说过。
那么问题又来了:如果是要通过一个小的阈值来判断的话,那程序实际是无法区分两个三角形是真正完全共面的,还是说二者间有一个非常非常小的角度,因为两种情况下都会使得两个法向量的叉乘结果小于这个很小的阈值。那么是否能说实际工程角度而言,其实是无法真正判断数学上的共面是否确实为真(除非这n个点的x、y、z三分量中的某一个分量数值完全相等)。
举个例子:我用4个点组成两个毗邻的三角形,二者共享一条边,两个三角形的法向量有个非常非常小的角度是0.001度,小于程序里的阈值0.01度,程序就把4个点视为共面了,然后给他们组成的“四边形”明明一个名称来标记这个面,那么这个面的法向量怎么取?两个法向量的数学平均?程序对于它所认定的面的操作也只是把它们用同一个名称(这个面的名称)来标记,取消各个点之间连线在这个面内部的显示吧(使其看起来像一个面),然后就是针对这组点(或者这个面)做平移变换缩放组操作吧?对面的本质操作就是对一组毗邻三角形及其点和线的组操作吧,和其是否真的共面没关系(而且本来程序就无法真正的在数学上判断共面)?
【 在 DoorWay 的大作中提到: 】
: 先区分:验证共面是图形问题,在console程序里也能做;与渲染(OpenGL接口 +显卡)显示是两回事。
: 验证四个点共面,简单的方法就是,分为两组:abc;bcd.
: 点构造向量,向量叉乘,是法向量。两个(法)向量判断平行,看叉积是否为0。
: ...................
--
修改:seeeU FROM 175.190.123.*
FROM 175.190.123.*