gpt4 book ai didi

java - "Is Triangle Touching"代码未给出正确结果

转载 作者:行者123 更新时间:2023-12-01 15:19:35 25 4
gpt4 key购买 nike

我在碰撞检测代码中使用的代码是这样的:

(注意:Vector3f 是 LWJGL 库的一部分。)

(注2:Tri是由LWJGL的Vector3fs.v1、v2、v3三个组成的类。)

public Vector<Tri> getTrisTouching(Vector3f pos, float radius){
Vector<Tri> tempVec = new Vector<Tri>();
for(int i = 0; i < tris.size(); i++){
Tri t = tris.get(i);

Vector3f one_to_point = new Vector3f(0,0,0);
Vector3f.sub(pos,t.v1,one_to_point); //Storing vector A->P

Vector3f one_to_two = new Vector3f(0,0,0);
Vector3f.sub(t.v2,t.v1, one_to_two); //Storing vector A->B

Vector3f one_to_three = new Vector3f(0,0,0);
Vector3f.sub(t.v3, t.v1, one_to_three); //Storing vector A->C

float q1 = Vector3f.dot(one_to_point, one_to_two) / one_to_two.lengthSquared(); // The normalized "distance" from a to
float q2 = Vector3f.dot(one_to_point, one_to_three) / one_to_three.lengthSquared(); // The normalized "distance" from a to



if (q1 > 0 && q2 > 0 && q1 + q2 < 1){
tempVec.add(t);
}
}

return tempVec;
}

我的问题是如何正确查看空间中的一个点是否正在接触我的一个三角形?

最佳答案

要测试您的点是否在三角形内,请创建一条以测试点为原点的射线并将其延伸到无穷远。一个简单的方法是水平射线(例如 y 常数,x 增加到无穷大。然后计算它与多边形边之一相交的次数。零或偶数相交意味着您在三角形之外. 这样做的好处是它不仅适用于三角形,而且适用于任何多边形。

http://erich.realtimerendering.com/ptinpoly/

关于java - "Is Triangle Touching"代码未给出正确结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11145141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com