DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Dreiecksproblem mit Vektorrechnung | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2011-12-14, 13:31 h PeaBrain Posts: 265 User |
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 [ - Answer - Quote - Direct link - ] |
2011-12-14, 16:17 h Thore Posts: 2266 User |
Probiers mal mit Thales, der könnte dich weiterbringen. http://de.wikipedia.org/wiki/Satz_des_Thales [ - Answer - Quote - Direct link - ] |
2011-12-17, 16:56 h jbr Posts: 8 User |
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. [ - Answer - Quote - Direct link - ] |
2011-12-17, 17:39 h DrNOP Posts: 4118 User |
@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: 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 [ - Answer - Quote - Direct link - ] |
2011-12-17, 18:24 h Lippi Posts: 1247 User |
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 mfg Lippi - - Bin ich froh, dass ich weg vom Fenster bin! AmigaOS3.9/Ubuntu10.04 Infokanal * meine Arbeit * infokanal@t-online.de [ Dieser Beitrag wurde von Lippi am 17.12.2011 um 18:30 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2011-12-17, 18:35 h Lippi Posts: 1247 User |
Zitat: 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 Infokanal * meine Arbeit * infokanal@t-online.de [ Dieser Beitrag wurde von Lippi am 17.12.2011 um 19:06 Uhr geändert. ] [ - Answer - Quote - Direct link - ] |
2011-12-17, 22:09 h Thore Posts: 2266 User |
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? [ - Answer - Quote - Direct link - ] |
2011-12-19, 16:13 h Holger Posts: 8116 User |
Zitat: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. [ - Answer - Quote - Direct link - ] |
2011-12-19, 22:47 h Thore Posts: 2266 User |
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. ] [ - Answer - Quote - Direct link - ] |
2011-12-19, 23:29 h Mda Posts: 90 User |
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() [ - Answer - Quote - Direct link - ] |
2011-12-19, 23:36 h Mda Posts: 90 User |
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() [ - Answer - Quote - Direct link - ] |
2011-12-20, 06:58 h Mda Posts: 90 User |
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. [ - Answer - Quote - Direct link - ] |
2011-12-21, 14:28 h Palgucker Posts: 1342 User |
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 [ - Answer - Quote - Direct link - ] |
2011-12-21, 17:12 h PeaBrain Posts: 265 User |
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 [ - Answer - Quote - Direct link - ] |
2011-12-21, 17:33 h Thore Posts: 2266 User |
@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 [ - Answer - Quote - Direct link - ] |
2011-12-22, 09:45 h PeaBrain Posts: 265 User |
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. ] [ - Answer - Quote - Direct link - ] |
2011-12-22, 09:49 h PeaBrain Posts: 265 User |
@Mda: danke. deine loesung ist wirklich interessant. mich stoert nur daran, dass es wurzeln und winkelfunktionen gibt. ein kleiner makel [ - Answer - Quote - Direct link - ] |
2011-12-22, 09:51 h PeaBrain Posts: 265 User |
@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 [ - Answer - Quote - Direct link - ] |
2011-12-22, 12:37 h Thore Posts: 2266 User |
> liegt auch alpha im punkt C somit ist d = a * sin alpha. Ah okay, gut wenn man eine Zeichnung oder Beschreibung hat [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Dreiecksproblem mit Vektorrechnung | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |