amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Dreiecksproblem mit Vektorrechnung [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

14.12.2011, 13:31 Uhr

PeaBrain
Posts: 265
Nutzer
Hallo Leute,

ich hab da eine kleine Aufgabe.
Man nehme ein Dreieck mit den Punkten A(x|y),B(x|y),C(x|y).
Von diesen Punkten kenne ich nur die Koordinaten des Punktes A und B.
Ich weiss aber, dass zwischen den Stecken BC und und AC ein rechter Winkel ist.
Und ich kenne die Länge der Strecke von B nach C.
Und natürlich von A nach B :)
Wie kann ich den Punkt C ausrechnen?

Danke schonmal im voraus :)

Beste Gruesse,
Peabrain

[ - Antworten - Zitieren - Direktlink - ]

14.12.2011, 16:17 Uhr

Thore
Posts: 2266
Nutzer
Probiers mal mit Thales, der könnte dich weiterbringen.

http://de.wikipedia.org/wiki/Satz_des_Thales

[ - Antworten - Zitieren - Direktlink - ]

17.12.2011, 16:56 Uhr

jbr
Posts: 8
Nutzer
Wie Thore richtig schreibt, ist der Satz von Thales elementargeometrisch hilfreich, in der Analytischen Geometrie wäre das das Skalarprodukt. Um Dir aber weiter helfen zu können, muss man etwas mehr wissen, etwa den Abstand von C zu AB oder die Länge von AC oder BC. Sonst hat man, wie man mit einem Zirkel, Lineal und Bleistift leicht zeigen kann, unendlich viele Lösungen und man kann C nicht ausrechnen. Wie sieht das Problem nun genauer beschrieben aus? Ob du weißt, was ein Skalarprodukt ist, ist egal, aber wir müssen das Problem genauer kennen, um Dir helfen zu können.

[ - Antworten - Zitieren - Direktlink - ]

17.12.2011, 17:39 Uhr

DrNOP
Posts: 4118
Nutzer
@jbr:
Entweder verstehe ich dich nicht oder PeaBrain. ;)

Du verlangst für eine eindeutige Lösung unter anderem die Länge von BC. PeaBrain schreibt doch oben, daß er die kennt:
Zitat:
Original von PeaBrain:
Und ich kenne die Länge der Strecke von B nach C.
Und natürlich von A nach B :)


Außerdem weiß er, daß an Punkt C der rechte Winkel des Dreiecks liegt. Also ich finde das ist sogar eine Angabe mehr als man für eine eindeutige Lösung braucht, oder sehe ich da was falsch?
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

17.12.2011, 18:24 Uhr

Lippi
Posts: 1247
Nutzer
Ich verstehe das Problem jetzt auch nicht:

a² + b² = c²

c = Stracke AB bekannt
b = Strecke BC bekannt
Winkel zwischen Strecken b und c 90 Grad
C gesucht, also einfach die Fromel umstellen:
a² = c² - b²
a = Wurzel a²

Nachtrag:Phytagoras wäre hier hilfreich :glow:


mfg Lippi - - Bin ich froh, dass ich weg vom Fenster bin! AmigaOS3.9/Ubuntu10.04
Infokanalmeine Arbeit * infokanal@t-online.de


[ Dieser Beitrag wurde von Lippi am 17.12.2011 um 18:30 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

17.12.2011, 18:35 Uhr

Lippi
Posts: 1247
Nutzer
Zitat:
Original von jbr:
Wie Thore richtig schreibt, ist der Satz von Thales elementargeometrisch hilfreich, in der Analytischen Geometrie wäre das das Skalarprodukt. Um Dir aber weiter helfen zu können, muss man etwas mehr wissen, etwa den Abstand von C zu AB oder die Länge von AC oder BC. Sonst hat man, wie man mit einem Zirkel, Lineal und Bleistift leicht zeigen kann, unendlich viele Lösungen und man kann C nicht ausrechnen. Wie sieht das Problem nun genauer beschrieben aus? Ob du weißt, was ein Skalarprodukt ist, ist egal, aber wir müssen das Problem genauer kennen, um Dir helfen zu können.


Was hier eine dreidimensionale Betrachtung (Euklidischer Raum) damit zu tun haben soll, erschliesst sich mir leider nicht vollständig...
--
mfg Lippi - - Bin ich froh, dass ich weg vom Fenster bin! AmigaOS3.9/Ubuntu10.04
Infokanalmeine Arbeit * infokanal@t-online.de


[ Dieser Beitrag wurde von Lippi am 17.12.2011 um 19:06 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

17.12.2011, 22:09 Uhr

Thore
Posts: 2266
Nutzer
Also mal nachgedacht... mal schauen obs so geht:
sin alpha = a/c
Dadurch bekommen wir den Winkel alpha raus.
180 - alpha - 90 = beta

sin beta = b / c
b = sin beta * c

Damit haben wir die Länge von b.
Lässt sich damit was anfangen?

[ - Antworten - Zitieren - Direktlink - ]

19.12.2011, 16:13 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Thore:
b = sin beta * c

Damit haben wir die Länge von b.
Lässt sich damit was anfangen?

Exakt genausoviel wie mit einer über den Pythagoras ausgerechneten Länge (wie von Lippi vorgeschlagen).

Was aber gesucht wird, sind die Koordinaten des dritten Punktes.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

19.12.2011, 22:47 Uhr

Thore
Posts: 2266
Nutzer
Ok denken wir uns einen Punkt X.
Seine Koordinaten sind X (bx|ay)
Strecke AX = d, Strecke BX = d
Nehmen wir den Winkel delta = Winkel zwischen AX und AB.
Sinus delta = e/c (c ist ja bekannt)
Dann nehmen wir den Winkel Alpha.
90 - alpha - delta = omega (mein Drehwinkel)

Jetzt mach ich an A und B eine Rotation um diesen Winkel omega, und weiß, C steht nun völlig senkrecht im Koordinatensystem.
cos(radWinkel)*x = neues x
sin(radWinkel)*y = neues y
radWinkel = Winkel / 180 * Pi

Wenn ich irgendwo einen Fehler hab, bitte korrigieren, aber ich denk das ist der korrekte Ansatz.

Nun kann ich C ausrechnen:
cx = ax, cy = by

[ Dieser Beitrag wurde von Thore am 19.12.2011 um 22:47 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

19.12.2011, 23:29 Uhr

Mda
Posts: 90
Nutzer
Quick-And-Dirty (in Hollywood):

ax=Rnd(200) ; X-Koordinate von A
ay=Rnd(200) ; Y-Koordinate von A
bx=Rnd(200)+ax+100 ; X-Koordinate von B
by=ay ;Rnd(200) ; Y-Koordinate von B
ab=Sqrt((bx-ax)^2+(by-ay)^2) ; Strecke AB
bc=Rnd(ab+1) ; BC mufl kleiner oder gleich AB sein, da in C ein rechter Winkel ist

abhw=ASin((by-ay)/ab) ; Winkel der Strecke AB zur Horizontalen in A

ac=Sqrt(ab^2-bc^2) ; L‰nge von AC nach Ankathete^2=Hypotenuse^2-Gegenkatheten^2

a=ASin(bc/ab) ; Winkel zwischen AB und AC

achw=a+abhw ; Winkel der Strecke AC zur Horizontalen in A

cx=Cos(achw)*ac+ax
cy=Sin(achw)*ac+ay

Print("AX=",ax,"n")
Print("AY=",ay,"n")
Print("BX=",bx,"n")
Print("BY=",by,"n")
Print("CX=",cx,"n")
Print("CY=",cy,"n")

Line(ax+100,380-ay,bx+100,380-by,#WHITE) ; Zeichnung um je 100 Punkte nach rechts und unten verschoben
Line(ax+100,380-ay,cx+100,380-cy,#WHITE) ; 380-ay bzw. 380-by oder 380-cy, da Y-Koordinaten auf den Kopf
Line(cx+100,380-cy,bx+100,380-by,#WHITE)

Locate(ax+80,380-ay)
Print("A")
Locate(bx+110,380-by)
Print("B")
Locate(cx+100,370-cy)
Print("C")

WaitLeftMouse()

[ - Antworten - Zitieren - Direktlink - ]

19.12.2011, 23:36 Uhr

Mda
Posts: 90
Nutzer
2. Variante:

Hierbei liegt Punkt B nicht in gleicher Höhe wie Punkt A und kann zu dem auch links von A liegen. Hierdurch kann es vorkommen, daß z.B. A oben ist und dementsprechend B links und C rechts, oder A rechts und B oben und C links etc.
Die Bezeichnungen der Punkte können hier durch im Dreieck liegen. Diese wieder außerhalb des Dreiecks zu platzieren, wäre ein neues zu lösendes Problem.

ax=Rnd(200) ; X-Koordinate von A
ay=Rnd(200) ; Y-Koordinate von A
bx=Rnd(200) ; X-Koordinate von B
by=Rnd(200) ; Y-Koordinate von B
ab=Sqrt((bx-ax)^2+(by-ay)^2) ; Strecke AB
bc=Rnd(ab+1) ; BC mufl kleiner oder gleich AB sein, da in C ein rechter Winkel ist

abhw=ASin((by-ay)/ab) ; Winkel der Strecke AB zur Horizontalen in A

ac=Sqrt(ab^2-bc^2) ; L‰nge von AC nach Ankathete^2=Hypotenuse^2-Gegenkatheten^2

a=ASin(bc/ab) ; Winkel zwischen AB und AC

achw=a+abhw ; Winkel der Strecke AC zur Horizontalen in A

cx=Cos(achw)*ac+ax
cy=Sin(achw)*ac+ay

Print("AX=",ax,"n")
Print("AY=",ay,"n")
Print("BX=",bx,"n")
Print("BY=",by,"n")
Print("CX=",cx,"n")
Print("CY=",cy,"n")

Line(ax+100,380-ay,bx+100,380-by,#WHITE) ; Zeichnung um je 100 Punkte nach rechts und unten verschoben
Line(ax+100,380-ay,cx+100,380-cy,#WHITE) ; 380-ay bzw. 380-by oder 380-cy, da Y-Koordinaten auf den Kopf
Line(cx+100,380-cy,bx+100,380-by,#WHITE)

Locate(ax+80,380-ay)
Print("A")
Locate(bx+110,380-by)
Print("B")
Locate(cx+100,370-cy)
Print("C")

WaitLeftMouse()

[ - Antworten - Zitieren - Direktlink - ]

20.12.2011, 06:58 Uhr

Mda
Posts: 90
Nutzer
Die 2. Variante war meine ursprüngliche. Ich hatte Zufallszahlen gewählt, um bei meinem Algorithmus zu testen, ob wirklich ein rechter Winkel in C ist. Bei der 1.Variante ist dieses deutlicher zu erkennen.
Um zum Problem von PeaBrain zurückzukehren, muß man für ax,ay,bx,by und bc die bekannten Konstanten eintragen. Eine Gegenprobe (Ausrechnen der Winkel an Hand der Koordinaten der Punkte) habe ich nicht gemacht.

Das Problem von PeaBrain entspricht auch dem SsW-Satz der Kongruenzsätze. Der bekannte Winkel (90° in C) liegt der längsten Seite (AB) gegenüber, deren Punkte und damit auch deren Länge bekannt ist. Zudem ist auch die Länge von BC bekannt.

[ - Antworten - Zitieren - Direktlink - ]

21.12.2011, 14:28 Uhr

Palgucker
Posts: 1342
Nutzer
Hallo Peabrain,

ich bin nun mit Sicherheit kein "Mathematicus", aber "den Punkt C" zu berechnen, wird wohl schwierig werden.
Mit den gegebenen Werten fungiert die Strecke AB lediglich als Spiegelungs-Achse und die Strecke BC kann ja in positiver oder negativer Dreh-Richtung verlaufen. Somit müssten eigentlich für C immer 2 Koordinaten-Paare existieren - oder sehe ich das falsch?

Gruß Palgucker

[ - Antworten - Zitieren - Direktlink - ]

21.12.2011, 17:12 Uhr

PeaBrain
Posts: 265
Nutzer
Hallo leute,

danke fuer das rege feedback. nach langem nachdenken und viel lesen habe ich jetzt eine loesung.

erstmal habe ich mir ein paar definitionen gemacht.

a ist die strecke BC, also gegenueber von punkt A
b ist die strecke AC, also gegenueber von punkt B
und
c ist die strecke AB, also gegenueber von punkt C

winkel alpha ist der winkel am punkt A.
und der rechnet sich so aus
sin alpha = a / c

jetzt lege ich einen punkt D auf der strecke c fest.
die strecke DC liegt senkrecht zu AB.
der punkt D rechnet sich folgendermassen aus:

ich denke mir eine strecke d, die vom punkt B nach D geht.

d = a * a / c

das errechnet sich aus der tatsache, dass

sin alpha = a / c
und d = a * sin alpha
also ist d = a * a / c

und D ist demzufolge

D = B + (A - B) * a * a / (c * c)

jetzt fehlt nur noch die laenge der strecke DC.

die laenge von DC also b' = a * (1 - (a * a) / (c * c))

S ist die senkrechte auf AB mit der laenge c.

:) also ist der punkt C = D + S * b' / c

ich hoffe ich habe nichts vergessen.
wuerde mich freuen wenn das jemand verifieren koennte.

danke und mit freundlichen gruessen,
peabrain

[ - Antworten - Zitieren - Direktlink - ]

21.12.2011, 17:33 Uhr

Thore
Posts: 2266
Nutzer
@Palgucker: Grundsätzlich ja, aber vll reicht ihm das Dreieck das "richtigrum" liegt, also A, B, C gegen den Uhrzeigersinn gesehen.

Wieso ist d = a * sin alpha?
Ist es nicht so: d = a * sin beta
oder d = b * sin alpha?

Irgendwer hat nen Denkfehler drin ;)

[ - Antworten - Zitieren - Direktlink - ]

22.12.2011, 09:45 Uhr

PeaBrain
Posts: 265
Nutzer
danke fuer das verifizieren :)


beta liegt im punkt B.
und alpha liegt im punkt A.

DC ist sozusagen die hoehe des dreiecks ABC welche senkrecht auf der seite AB liegt.

und wenn man nun das dreieck CDB bilden, liegt auch alpha im punkt C ;)
somit ist d = a * sin alpha. da d die strecke DB bildet. welche gegenueber dem punkt C liegt.

und b * sin alpha ist ja die strecke DC im dreieck ADC.
aber ich suche ja die strecke DB. ;)

beste gruesse,
peabrain


[ Dieser Beitrag wurde von PeaBrain am 22.12.2011 um 09:46 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

22.12.2011, 09:49 Uhr

PeaBrain
Posts: 265
Nutzer
@Mda:

danke. deine loesung ist wirklich interessant.
mich stoert nur daran, dass es wurzeln und winkelfunktionen gibt.
ein kleiner makel :)

[ - Antworten - Zitieren - Direktlink - ]

22.12.2011, 09:51 Uhr

PeaBrain
Posts: 265
Nutzer
@Palgucker:

ja es exzistier immer ein paar des punktes C.
aber wenn man die strecke DC hat, braucht man sie ja nur spiegeln.
und schon hat man das zweite C.
gut erkannt :)

[ - Antworten - Zitieren - Direktlink - ]

22.12.2011, 12:37 Uhr

Thore
Posts: 2266
Nutzer
> liegt auch alpha im punkt C ;) somit ist d = a * sin alpha.

Ah okay, gut wenn man eine Zeichnung oder Beschreibung hat ;)

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Dreiecksproblem mit Vektorrechnung [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.