Je me suis donc cassé la tête sur cet algorithme relativement simple. Je ne sais pas exactement ce qui ne va pas dans mon code, mais je n'obtiens pas le point d'intersection où ils se croisent réellement.
J'utilise Unity3D et j'essaie de trouver le point d'intersection de deux lignes, dans le plan x,z mais pas dans le plan x,y. Je suppose que l'algorithme qui fonctionne pour x,y devrait fonctionner pour x,z ;
Mon code :
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);
Quelqu'un peut-il m'aider en m'indiquant ce que je fais mal ?
thisCar.forward
y threateningCar.forward
sont généralement [0,0,1], [0,0,-1]
o [1,0,0], [-1,0,0]