所以我遇到了这个问题:我正在编写一个程序,您可以点击屏幕上的一个点投影3D对象,并选择最接近该点的视觉(2D)三角形网格的顶点。我用三角形计算了交点的重心坐标。如何使用这些重心坐标计算最近的顶点? 谢谢你的帮助
答案 0 :(得分:1)
对于重心坐标(u,v,w)
和三角边长a,b,c
到A,B,C顶点的平方距离
dA^2 = -(a^2*v*w + b^2*w*(u-1) + c^2*v*(u-1)) =
-(a^2*v*w+b^2*w*u+c^2*v*u - b^2*w - c^2*v) =
b^2*w + c^2*v - Const (TheSameConstantForAllVertices)
dB^2 = -(a^2*(v-1)*w + b^2*w*u + c^2*(v-1)*u) =
a^2*w + c^2*u - Const
dC^2 = -(a^2*v*(w-1) + b^2*(w-1)*u + c^2*v*u)
a^2*v + b^2*u - Const
(more formulas here),这样您就可以比较平方距离并选择最小的距离。为了比较,我将简单的表达式分开了。
也许你需要一些相当好(接近等边)三角形的近似值。在这种情况下,从重心三联体中选择最大值。它大致对应于最近的顶点。