2016-05-04 11 views
1

Ich möchte ein rechtwinkliges Dreieck aus zwei gegebenen Punkten A und B konstruieren. In diesem speziellen Fall wird die Linie c, die von diesen Punkten erzeugt wird, für jeden x in y Richtung aufsteigend. (rosa Farben)Erstellen eines lotrechten Dreiecks aus 2 angegebenen Punkten

An der Stelle B möchte ich das Bein a mit einer festen Länge in einem 90 ° Winkel mit einer Abwärtsrichtung konstruieren. (Farbe grün).

Aus dem obigen folgt der Punkt C und Segment b (lila).

enter image description here

ich habe folgende Matlab-Code geschrieben C Calc und das Ergebnis angezeigt werden soll.

A = [ 1 1 ]; 
B = [ 5 4 ]; 

a = 2; % fixed len 

c = sqrt((B(1)-A(1))^2 + (B(2)-A(2))^2); 
b = sqrt(c^2 + a^2); 

alpha = atan(a/c); 
gamma = atan(c/a); 

C = A + 1/tan(gamma)*[-1 * (B(2)-A(2)) (B(1)-A(1))]; 

ALL = [A;B;C] 

x = ALL(:,1); 
y = ALL(:,2); 

%plot 
xlim([-2 8]); 
ylim([-2 8]); 
patch(x,y, 'green'); 

% debug output 
acheck = sqrt((A(1)-C(1))^2 + (A(2)-C(2))^2) % this should be B-C but somehow it isnt 
alpha_deg = rad2deg(alpha); 
gamma_deg = rad2deg(gamma); 

Und das ist das Ergebnis der Plotting.

enter image description here

Wie Sie das Bein sehen a am Punkt wurde A und nicht an der Stelle gebaut B und das Bein zeigt in die entgegengesetzte Richtung, dass ich es will.

Ich wäre dankbar, wenn jemand die Fehler meines Weges erklären könnte.

Dank

+1

Ich schlage vor, Sie erklären Ihre Begründung hinter der Linie 'C = A + 1/tan (Gamma) * [- 1 * (B (2) -A (2)) (B (1) -A (1)) ]; ' – Dan

+0

ich kopierte das von einer anderen SO-Antwort auf, wie man einen fehlenden Punkt C – robkuz

+0

berechnet, dann müssen Sie Ihre Frage redigieren, um zu dieser Antwort zu verweisen – Dan

Antwort

1

was finden Sie 1/tan(gamma)*[-1 * (B(2)-A(2)) (B(1)-A(1))] ist der Vektor von B nach C zeigt.

1

wäre es nicht einfacher sein, nur einen orthonormal Vektor B-A zu berechnen? so etwas wie: Fügen Sie B, um es

n = [A(2)-B(2) B(1)-A(1)]; 
n = n/norm(n)*2; 
C = B+n; 

oder

C = B-n; 
Verwandte Themen