Wie kann ich eine Linie mit einer bestimmten Länge und Richtung zeichnen?

7

Ich möchte eine Linie mit einer bestimmten Länge und Richtung erstellen.

Damit meine ich das Zeichnen einer Linie von Punkt A nach Punkt B. Normalerweise ist in Einheit C # das Zeichnen einer Linie von Punkt A nach Punkt B einfach:

Debug.DrawLine(point_A, point_B);

Das Diagramm wäre ungefähr so

A----------------B

Aber ich möchte so etwas nicht, ich möchte, dass es von Punkt A nach Punkt B zieht, aber mit einer bestimmten Länge. Ich schätze, ich brauche die Richtung, damit das funktioniert. Aber ich weiß nicht, wie ich es codieren soll.

Hier ist ein grundlegendes Diagramm, wie ich es will.

A--------        B
JekasG
quelle

Antworten:

8

Sie können den Vektor einfach in die richtige Richtung zeigen lassen, ihn dann um den gewünschten Abstand skalieren und zum Anfangspunkt hinzufügen. Dadurch wird ein neuer Endpunkt für Ihre Linie definiert.

//Get the direction of the line
Vector3 direction = point_B - point_A;
//Get a new point at your distance from point A
Vector3 point_C = point_A + (direction.normalized * distance);
//Draw the line
Debug.DrawLine(point_A, point_C);
MichaelHouse
quelle
Die Antwort ist richtig, abgesehen von einem winzigen Detail: Normalisieren gibt keinen Vektor in Einheit c # zurück, sodass Sie ihn in einer zusätzlichen Codezeile in Richtung aufrufen müssen. Siehe docs.unity3d.com/ScriptReference/Vector3.Normalize.html
Kronos
@Kronos Danke, ich habe mir beim Schreiben der Antwort nicht die Dokumentation angesehen, sondern die normalizedVariable. Was im Wesentlichen eine normalisierte Kopie zurückgibt.
MichaelHouse
2

Wenn Sie den Start- und Endpunkt sowie die gewünschte Länge kennen, können Sie verwenden Vector3.Lerp

Vector3 midPoint = Vector3.Lerp(startVector, endVector, 0.5f);

Debug.DrawLine(startVector, midPoint);
Captain Redmuff
quelle
Dies funktioniert nur, wenn die gewünschte Länge ein bekannter Prozentsatz der ursprünglichen Entfernung ist. Der Code sollte also die Berechnung zur Bestimmung des Längenverhältnisses (zwischen Original und gewünscht) enthalten, da op nicht sagte, dass es immer auf halbem Weg war.
MichaelHouse
Mir war nicht bewusst, dass Vector3.Lerp den Abstand zwischen 0,0 und 1,0 festhält. docs.unity3d.com/ScriptReference/Vector3.Lerp.html
CaptainRedmuff
1
Es ist nicht nur geklemmt, sondern Sie müssen mehr berechnen, als Ihre Antwort zeigt. Angenommen, Sie möchten, dass Ihre Leitung 8 Einheiten lang ist. Sie müssten zuerst den Abstand zwischen Ihren beiden Punkten berechnen, der sich beispielsweise als 10 Einheiten herausstellt, und dann die Lerp-Methode mit Ihrem 8/10Verhältnis angeben, um die gewünschte Linienlänge zu erhalten. Ihre derzeitige Antwort erlaubt nur Linien, die so lang oder kürzer sind als der Abstand zwischen Ihren beiden Punkten, und es wird davon .5ausgegangen, dass der Abstand bereits bekannt ist (mithilfe von in lerp).
MichaelHouse