在研究各种三角形点测试方法(二维情况)时,我发现使用重心坐标的方法是最常用的方法。Here是一个stackoverflow答案,可以解释这一点。为什么这种方法是最受欢迎的?这可能与减少计算有关,但数值稳定性如何?这种算法是否比“同边”技术更适合于点特别靠近边界的情况? 最佳答案 如果你解决了它:p = p0 + (p1 - p0) * s + (p2 - p0) * ts = <0.0,1.0>t = <0.0,1.0>s+t<=1.0在焊接该系统时:p.a = p0.a + (p1.a - p0.a) * s + (p2.a - p0.a) * tp.b = p0.b + (p1.b - p0.b) * s + (p2.b - p0.b) * t----------------------------------------------------你有两个代数选项:I. t = (p.a - p0.a - (p1.a - p0.a) * s) / (p2.a - p0.a)II. p.b = p0.b + (p1.b - p0.b) * s + (p2.b - p0.b) * t----------------------------------------------------II. p.b = p0.b + (p1.b - p0.b) * s + (p2.b - p0.b) * (p.a - p0.a - (p1.a - p0.a) * s) / (p2.a - p0.a)II. s = (p.b-p0.b) / ( (p1.b-p0.b) + ( (p2.b-p0.b)*(p.a-p0.a-(p1.a-p0.a)/(p2.a-p0.a) ) )...以及:I. s = (p.a - p0.a - (p2.a - p0.a) * t) / (p1.a - p0.a)II. p.b = p0.b + (p1.b - p0.b) * s + (p2.b - p0.b) * t----------------------------------------------------...给你两个代数解的选项。为了确保稳定,你应该用足够大的数值来划分。所以你应该选择轴(a,b -> ),并且点顺序,这样你就不会被零或小数量的数字分隔。为了避免这种情况,可以使用矩阵方法p.a = p0.a + (p1.a - p0.a) * s + (p2.a - p0.a) * tp.b = p0.b + (p1.b - p0.b) * s + (p2.b - p0.b) * t--------------------------------------------------|p.a| | (p1.a - p0.a) , (p2.a - p0.a) , p0.a | | s ||p.b| = | (p1.b - p0.b) , (p2.b - p0.b) , p0.b | * | t || 1 | | 0 , 0 , 1 | | 1 |--------------------------------------------------------| s | | (p1.a - p0.a) , (p2.a - p0.a) , p0.a | | p.a || t | = inverse | (p1.b - p0.b) , (p2.b - p0.b) , p0.b | * | p.b || 1 | | 0 , 0 , 1 | | 1 |------------------------------------------------------------------在这里,你有更多的选择轴顺序,点顺序,使逆矩阵是可计算的。如果使用子行列式方法求逆矩阵解,那么唯一重要的是最后的除法步骤。所以你可以选择顺序,直到你有非零的行列式。关于algorithm - 重心坐标三角点试验的数值稳定性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37424174/
10-09 08:16