J'ai 4 vecteurs pointant sur 4 coins d'un carré. Je voudrais détecter s'ils sont dans une certaine proximité d'un autre vecteur pointant ailleurs et si oui, agir en conséquence. J'ai trouvé un algorithme dit à mesurer la distance la plus courte entre deux segments de ligne, mais il ne fonctionne pas correctement, je pense:Comment mesurer la distance entre deux segments de ligne dans Unity3d
public class Test : MonoBehaviour {
public void FixedUpdate() {
var source = new Vector3(0, 0, 0);
var target = new Vector3(0, 0, 4);
var otherSource = new Vector3(1.6f, 0, -0.5f);
foreach (var dir in new[] {
new Vector3(source.x + 1, source.y, source.z + 1),
new Vector3(source.x - 1, source.y, source.z + 1),
new Vector3(source.x + 1, source.y, source.z - 1),
new Vector3(source.x - 1, source.y, source.z - 1)
}) {
var A = source;
var B = otherSource;
var a = dir - A;
var b = target - B;
var n = Vector3.Cross(a, b);
var u = Vector3.Cross(n, A - B)/Vector3.Dot(n, n);
var AA = A - a * Vector3.Dot(b, u);
var BB = B - b * Vector3.Dot(a, u);
Debug.DrawRay(A, a, Color.blue);
Debug.DrawRay(B, b, Color.red);
Debug.DrawLine(AA, BB, Color.green);
}
}
}
Maintenant, si vous l'exécutez, vous verrez quelque chose comme ceci:
J'espérais voir quatre lignes vertes, mais il n'y en a pas. Si je hovewer déplace le vecteur otherSource
un peu haut, je vois ceci:
donc un peu mieux, mais toujours pas ce que je cherche. Toute aide pour ajuster cet algorithme?
'Vector3.Distance' est utilisé pour trouver la distance entre deux vecteurs – Programmer
Vous pouvez également soustraire deux vecteurs et obtenir la grandeur au carré, ce qui serait bien pour les comparaisons. – George
Qu'est-ce qu'un autre vecteur pointant ailleurs? Et * mesurer la distance la plus proche entre deux vecteurs *, voulez-vous dire * distance entre deux points * ou * deux segments/lignes définies par deux points *? – zwcloud