Winkel zwischen drei Punkten
Übersicht

![]() |
ChristophBetreff: Winkel zwischen drei Punkten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo zusammen,
ich habe ein Problemchen: Ich erstelle per createpivot() 3 Punkte zufällig im Raum. Der Erste ist mit dem Zweiten verbunden, der Zweite mit dem Dritten. Nun ergibt sich ein Winkel zwischen den drei Punkten: Diesen Winkel möchte ich messen besser gesagt errechnen ![]() Habt ihr eine Idee wie ich Alpha herausfinde? |
||
![]() |
Lunatix |
![]() Antworten mit Zitat ![]() |
---|---|---|
öhm Satz des Pytagoras ?
Google mal oder schau auf Wiki |
||
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen... |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: öhm Satz des Pytagoras ?
Ich dachte immer, dass der Satz des Pytagoras den direkten Weg ausrechnet... Kann ich damit auch Winkel ausrechnen??? |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja also wenn du das nur ( wie du es ja machst ) auf 2 Achsen haben willst dann ist es relativ einfach! zwei mal Atan2 und die differenz, wobei ich grade überlege, dass es bestimmt noch einfacher gehen muss...
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ich erstelle per createpivot() 3 Punkte zufällig im Raum.
Ich nutze alle drei Achsen, mit zwei Achsen wüsste ich mir selbst zu helfen... |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://de.wikipedia.org/wiki/Skalarprodukt <- viel spaß damit! ![]() (tipp: der englische artikel ist etwas netter) http://en.wikipedia.org/wiki/Dot_product ![]() das ist die formel, die du brauchst. aber vorsicht: das a und b da sind vektoren und die multiplikation da muss als skalarprodukt berechnet werden. wie das geht, steht auf den oben genannten seiten. |
||
MrKeks.net |
- Zuletzt bearbeitet von Mr.Keks am Sa, Nov 11, 2006 12:57, insgesamt einmal bearbeitet
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit ATan2 kann man winkel ausrechnen. Ich sitze gerade an nem neuen Shader der über die Vektoren arbeitet,
und ich denke mit diesen müsstest du auch was anfangen können. Wenn du den Winkel am 2. Pivot haben willst, dann musst du den Winkel vom Vektor des 1. zum 2. Pivots und dem Vektor des 3. zum 2. Pivots berechnen. Etwas über Vektoren: http://de.wikipedia.org/wiki/Vektor Das Skalarprodukt sollte die auch helfen können; wenn man die gleichung umformt, dann kann man den Cosinus des Winkels ausrechnen: http://de.wikipedia.org/wiki/Skalarprodukt Falls du zu einem ergebnis kommst, teils mir bitte mit, denn mit dem Shader bin ich gerade in einer Sackgasse; |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ein Winkel an sich ist ja schonmal 2D, also musst du dir erstmal überlegen welche der mindestens 9 Winkel die man so sieht du brauchst!
Mir ist grad noch die beste Lösung für dein Bild da oben eingefallen! Der Cosinussatz: a² = b² + c² - 2 * b * c * cos (alpha) | / cos (alpha) a² / cos ( alpha ) = b² + c² - 2 * b * c | / a² cos ( alpha ) = (b² + c² - 2 * b * c) / a² alpha = Acos ( (b² + c² - 2 * b * c) / a² ) Funktioniert in jedem Dreieck. Für die Umformung vom normalen Cosinussatz keine Garantie... ![]() MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gibt es auch eine für einen 9. Klässler verständliche Formel? ![]() Zitat: also ein Winkel an sich ist ja schonmal 2D
Ich verstehe was du meinst. Die 3 Punkte liegen immer auf einer Ebene (ist bei einem Dreieck immer so...). Ich hätte das irgendwie versucht, so zu lösen: Ich peile mit dem 2. Punkt den 1. an. (pointentitity) Dann merke ich mir die Winkel (Pitch, Yaw) Dann peile ich mit dem 2. Punkt den 3. an. (pointentity) Dann merke ich mir die Winkel (Pitch, Yaw) Aber was fange ich jetzt mit diesen 4 Winkeln an? Ich komme irgendwie nicht weiter |
||
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei den 3 Ortsvektoren A, B und C geht das theoretisch dann so:
EdgeAB = B - A EdgeCB = B - C Alpha = ArcCos(EdgeAB x EdgeCB)/(|EdgeAB||EdgeCB|) bzw. in Blitz: Code: [AUSKLAPPEN] Type TVector
Field X# Field Y# Field Z# End Type Global A.TVector, B.TVector, C.TVector Global EdgeAB.TVector, EdgeCB.TVector Global DotProduct#, LengthAB#, LengthCB# Global Angle# A.TVector = New TVector A\X = 0.0 A\Y = 0.0 A\Z = 0.0 B.TVector = New TVector B\X = 0.0 B\Y = 0.0 B\Z = 0.0 C.TVector = New TVector C\X = 0.0 C\Y = 0.0 C\Z = 0.0 EdgeAB = New TVector EdgeAB\X = B\X - A\X EdgeAB\Y = B\Y - A\Y EdgeAB\Z = B\y - A\Z EdgeCB = New TVector EdgeCB\X = B\X - C\X EdgeCB\Y = B\Y - C\Y EdgeCB\Z = B\Z - C\Z DotProduct = EdgeAB\X*EdgeCB\X + EdgeAB\Y*EdgeCB\Y + EdgeAB\Z*EdgeCB\Z LengthAB = Sqr(EdgeAB\X*EdgeAB\X + EdgeAB\Y*EdgeAB\Y + EdgeAB\Z*EdgeAB\Z) LengthCB = Sqr(EdgeCB\X*EdgeCB\X + EdgeCB\Y*EdgeCB\Y + EdgeAB\Z*EdgeCB\Z) Angle# = ACos(DotProduct#/(LengthAB*LengthCB)) Musst entsprechend bei A, B und C die jeweiligen Koordinaten eintragen... mfg olli |
||
vertex.dreamfall.at | GitHub |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mr. Keks hat dir oben doch die Antwort auf deine Frage gegeben. Wo ist da das Problem, diese Methode zu nutzen?
Jede andere Variante wird im Endeffekt wieder auf dieser Lösung landen, sie wird dabei höchstens komplizierter aussehen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich werde es mal mit dieser Formel versuchen.
Vielen Dank erstmal |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
bei meiner formel ( wenn die umformung richtig ist ![]() Code: [AUSKLAPPEN] C | \ | \ A---B und an der seite a liegt dann alpha, dieses Dreieck ist nur ein Beispiel, stell dir dein Dreieck dort vor und setz die längen ein! MfG ~Edit~ so also ich versuch mich nochmal an der umformung, die von oben war wegen punkt vor strich bullshit ( die fetten Klammern sind nicht pflicht aber eigentlich unsichtbar wegen punkt vor strich vorhanden, was ich oben vergas ): a² = b² + c² - ( 2 * b * c * cos (alpha) ) | + ( 2 * b * c * cos ( alpha ) ) , -a² 2 * b * c * cos ( alpha ) = b² + c² - a² | / ( 2 * b * c ) cos ( alpha ) = ( b² + c² - a² ) / ( 2 * b * c ) alpha = Acos ( ( b² + c² - a² ) / ( 2 * b * c ) ) JAAA! Das ist nun so richtig, also einfach die letzte Zeile in Blitz benutzen! soo grad nochmal dein Bild modifiziert, die kleinen Buchstaben sind die Seitennamen, die Bx-Cx usw. sind die berechnungen der Seiten. |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, danke @ all, das Problem hat sich jetzt erledigt ![]() Jetzt wollte ich euch noch ein weiteres (wahrscheinlich letztes) Mal etwas fragen: Und zwar folgende Situation: Ich habe den Winkel zwischen Punkt1/2/3 herausgefunden und stelle fest, dass er nicht so groß ist, wie er sein sollte. Nun will ich, ohne die Distanz der Punkte zueinander zu verändern, die Punkte so verschieben, dass der Winkel stimmt. Der 1. Punkt soll dabei so weit verschoben werden wie der dritte, d.h. sie teilen sich die Distanz, die man insgesamt zurücklegen muss, um den "falschen" Winkel zu korrigieren. Bsp: Der Winkel ist 50° groß. Er sollte eigentlich nur 90° groß sein. Nun wird Punkt1 um 20° ((90°-50°)/2) rotiert. Das Rotationszentrum ist Punkt2 um die Distanz der Punkte gleich zu halten. Nun wird auch Punkt3 um 20° ((90°-50°)/2) rotiert. Das Rotationszentrum ist Punkt2 um auch diese Distanz gleich zu halten. Ich steh auf dem Schlauch... |
||
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
x#=urx#+sin(winky#)*dist#*cos(winkx#)
y#=ury#+sin(winkx#)*dist# z#=urz#+cos(winky#)*dist#*cos(winkx#) hoffe, das hilft dir |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ging ja schnell ![]() Stimmt, auf sin(), cos() hätt ich auch selbst kommen können. Thx |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nur so aus intresse, mit wessen lösung hast du nun eigentlich den Winkel berechnet?
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group