Jon*_*nny 5 c# math geometry unity-game-engine
所以我一直在试着这个相对简单的算法.我不确定我的代码中有什么问题,但我没有得到它们实际相交的交点.
我正在使用Unity3D,我试图找到两条线相交的点,在x,z平面上虽然不在x,y平面上.我假设适用于x,y的算法适用于x,z;
我的代码:
Vector3 thisPoint1 = thisCar.position + (2 * thisCar.forward);
Vector3 thisPoint2 = thisCar.position + (20 * thisCar.forward);
Debug.DrawLine(thisPoint1, thisPoint2, Color.white, 2);
Vector3 otherPoint1 = threateningCar.position + (2 * threateningCar.forward);
Vector3 otherPoint2 = threateningCar.position + (20 * threateningCar.forward);
Debug.DrawLine(otherPoint1, otherPoint2, Color.white, 2);
float A1 = thisPoint2.z - thisPoint1.z;
float B1 = thisPoint1.x - thisPoint2.x;
float C1 = A1 * thisPoint1.x + B1 * thisPoint1.z;
float A2 = otherPoint2.z - otherPoint1.z;
float B2 = otherPoint1.x - otherPoint2.x;
float C2 = A2 * otherPoint1.z + B2 * otherPoint1.z;
float det = A1 * B2 - A2 * B1;
float x = (B2 * C1 - B1 * C2) / det;
float z = (A1 * C2 - A2 * C1) / det;
return new Vector3(x, this.transform.position.y, z);
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助指出我做错了什么?
thisCar.forward并且threateningCar.forward通常是[0,0,1], [0,0,-1]或[1,0,0], [-1,0,0]
找到了!!!
float A2 = otherPoint2.z - otherPoint1.z;
float B2 = otherPoint1.x - otherPoint2.x;
float C2 = A2 * otherPoint1.z + B2 * otherPoint1.z;
Run Code Online (Sandbox Code Playgroud)
应该:
float A2 = otherPoint2.z - otherPoint1.z;
float B2 = otherPoint1.x - otherPoint2.x;
Run Code Online (Sandbox Code Playgroud)
float C2 = A2 * otherPoint1。X + B2 * otherPoint1.z ;
白白浪费了很多时间:/。
无论如何,这将帮助任何想要进行线交叉的人。
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |