2016-08-06 10 views
-3

Ein Benutzer wird eine Linie auf dem Bildschirm definieren, die, wenn sie gezeichnet wird, eine bestimmte Dicke hat (oder Breite).Bestimmen Sie ein begrenzendes Rechteck um eine diagonale Linie

Ich muss jetzt in der Lage sein, die Koordinaten eines Begrenzungsrechtecks ​​um dieses zu bestimmen. enter image description here

Ich habe die Koordinaten A und B, zusammen mit der Linienstärke (W).

Wie kann ich die Koordinaten A1, A2, B1 und B2 berechnen?

Ich suchte, aber war nicht in der Lage, eine entsprechende entsprechende Frage zu finden.

+0

Es scheint ein mathematisches zu sein (geometrische) Frage – Michael

+2

Ich wähle diese Frage zu schließen, wie Off-Topic, weil sie nicht über die Programmierung, sondern um Geometrie . – 4castle

+0

Hier geht es um Mathematik UND Programmierung, da mathematische Formeln in die entsprechende Programmiersprache, in diesem Fall Java, übersetzt werden müssen. Also kein Thema für Mathematik oder Programmierung! – Simon

Antwort

0
Dx= Xb - Xa 
Dy= Yb - Ya 
D= sqrt(Dx * Dx + Dy * Dy) 
Dx= 0.5 * W * Dx/D 
Dy= 0.5 * W * Dy/D 

Dieser berechnet (Dx, Dy) einen Vektor der Länge W/2 in Richtung AB. Dann ist (-Dy, Dx) der senkrechte Vektor.

Xmin = min(Xa, Xb) - abs(Dy) 
Xmax = max(Xa, Xb) + abs(Dy) 
Ymin = min(Ya, Yb) - abs(Dx) 
Ymax = max(Ya, Yb) + abs(Dx) 

aktualisieren:

ich für die AABB beantwortet versehentlich.

Für die vier Ecken des Hubes

Xa - Dy, Ya + Dx 
Xa + Dy, Ya - Dx 
Xb - Dy, Yb + Dx 
Xb + Dy, Yb - Dx 
+0

Wie können Sie dieses Rechteck mit 4 Koordinaten ausdrücken ...? –

+0

@willywonkadailyblah: oooops, antwortete ich für die AABB. –

+0

@ YvesDaoust, danke dafür. Eine Frage: Wird das funktionieren, unabhängig von der Reihenfolge der Start- und Endpunkte? Ich meine damit kann der Startpunkt größer sein als der Endpunkt - unten rechts nach oben links? – Simon

Verwandte Themen