|
|
发表于 2007-8-22 17:04:00
|
显示全部楼层
Re:如何判断任意点p在三角形内部?
设 p1p2 表示从点p2到点p1的向量。 例如: pa表示从三角形顶点a到点p的向量, ba表示从三角形顶点a到定点b的向量。
设 cross(p1p2, p3p4)表示向量p1p2和向量p3p4的叉乘。
设 normalize(vector)表示向量单位化.
则:
(1) pa = p - a; pb = p - b; pc = p - c; ba = b - a; cb = c - b; ac = a - c;
(2) V1 = normalize(cross(ba, pa)); V2 = normalize(cross(cb, pb)); V3 = normalize(cross(ac, pc));
如果 normalize(V1) = normalize(V2) = normalize(V3), 则点p在三角形abc的内部, 否则点p在三角形之外。
优化: 其中cross求差乘中只是些浮点数乘法和加法, 对效率影响不大, 如果还不满意, 可以使用SSE指令集加速。
normalize中需要求平方根, 是开销最大的地方, 优化方法是改为比较两个向量是否成比例。 如:
如果 V1.x / V2.x = V1.y / V2.y = V1.z / V2.z 则 V1 = V2. |
|