Anfängerfrage:Winkel berechnen < Lin. Algebra/Vektor < Oberstufe < Schule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:03 Di 15.02.2005 | Autor: | Noop1 |
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt: wmw.cc/forum/thread/threadid=36329/sid=/
Hallo!
Ich habe mal eine Frage:
Ich habe eine 3D-Fläche, die durch den Punkten A, B, C, D mit jeweils x, y, z als solche gekennzeichet ist.
Nun trifft ein (Licht-)strahl die Fläche.
Wie kriege ich raus, WO der Strahl eintrifft (Schnittstelle) und auch den Winkel, auf der der Strahl einschlägt?
Ich weiß, das es was mit den trigonometrischen Funktion (A)Sin/(A)Cos/(A)Tan zu tun haben müsste, aber wie wendet man die an 3D-Flächen an?
Gegeben habe ich ja A:xyz, B:xyz, C:xyz, T:(Position: xyz; Richtung x2y2z2) und ich suche Alpha (Dunkelrot), hier "Eintauchswinkel" benannt, für den Winkel relativ zur 3D-Fläche
und Beta (Hellrot), hier "Eintauchsrichtung" genannt, für den Winkel der Einschlagsrichtung, also ob der Strahl relativ zur Fläche von Norden (0°), Süden (180°), Westen (90°) oder Osten (270°) kommt oder halt irgendwas dazwischen (zum Beispiel 39,87654° für etwas Westen und etwas mehr Norden)
Wie rechnet man das aus?
Bild: [Dateianhang nicht öffentlich]
Mir wurde zwar gesagt: "Du bildest das Skalarprodukt aus dem Normalenvektor und deinem "Strahl" teilst durch das produkt der beträge und ziehst das von 90° ab.
fertig."
Aber ich versteh da echt nur Bahnhof ... was muss ich konkret machen?
Ich hab zwar versucht, das zu ergoogeln, aber ich stolper auf Symbole, die ich gar nicht entziffern kann, da ich leider nach dem 10. Schuljahr aufgehört habe und es steht scheinbar nirgendswo, was diese bedeuten.
Also über eine Liste, wo zB ich rauslesen kann, wo zB der Unterschied zwischen |a| x |a| und a x a ist, wäre ich auch glücklich
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
Hallo Noop1!
> Ich habe eine 3D-Fläche, die durch den Punkten A, B, C, D
> mit jeweils x, y, z als solche gekennzeichet ist.
Du kannst uns die Fläche auch ruhig direkt angeben! Wenn ich ein spezielles Beispiel bekomme, kann ich auch einfach mal dran rumprobieren - so fällt mir deine Aufgabe im Moment auch etwas schwer... Aber was meinst du mit x,y,z? Sind das nur die Koordinatenachsen oder hat das noch eine weitere Bedeutung?
> Nun trifft ein (Licht-)strahl die Fläche.
> Wie kriege ich raus, WO der Strahl eintrifft
> (Schnittstelle) und auch den Winkel, auf der der Strahl
> einschlägt?
> Ich weiß, das es was mit den trigonometrischen Funktion
> (A)Sin/(A)Cos/(A)Tan zu tun haben müsste, aber wie wendet
> man die an 3D-Flächen an?
Also, in meinem guten alten Mathebuch finde ich folgende Formel:
[mm] \sin{\alpha}=\bruch{|\vec{u}\vec{n}|}{|\vec{u}||\vec{n}|}, [/mm] wobei [mm] \vec{u} [/mm] der Richtungsvektor der Geraden ist und [mm] \vec{n} [/mm] der Normalenvektor der Ebene.
Ich würde sagen, zuerst musst du also deine Gerade in Parameterdarstellung schreiben, und die Ebene in Normalenform.
> Gegeben habe ich ja A:xyz, B:xyz, C:xyz, T:(Position: xyz;
> Richtung x2y2z2) und ich suche Alpha (Dunkelrot), hier
> "Eintauchswinkel" benannt, für den Winkel relativ zur
> 3D-Fläche
> und Beta (Hellrot), hier "Eintauchsrichtung" genannt, für
> den Winkel der Einschlagsrichtung, also ob der Strahl
> relativ zur Fläche von Norden (0°), Süden (180°), Westen
> (90°) oder Osten (270°) kommt oder halt irgendwas
> dazwischen (zum Beispiel 39,87654° für etwas Westen und
> etwas mehr Norden)
>
> Wie rechnet man das aus?
>
> Bild: http://srv02623.gu2.info/bilder/3d.jpg
Versuch doch mal, dein Bild direkt hier einzufügen - falls du nicht weißt, wie das geht, hier steht's.
Das sieht ja recht kompliziert aus - sollst du es denn so allgemein machen? Oder hast du was Konkretes gegeben?
> Mir wurde zwar gesagt: "Du bildest das Skalarprodukt aus
> dem Normalenvektor und deinem "Strahl" teilst durch das
> produkt der beträge und ziehst das von 90° ab.
> fertig."
> Aber ich versteh da echt nur Bahnhof ... was muss ich
> konkret machen?
Tja, ich fürchte, dann hilft dir meine obige Formel auch nicht weiter!?
> Ich hab zwar versucht, das zu ergoogeln, aber ich stolper
> auf Symbole, die ich gar nicht entziffern kann, da ich
> leider nach dem 10. Schuljahr aufgehört habe und es steht
> scheinbar nirgendswo, was diese bedeuten.
> Also über eine Liste, wo zB ich rauslesen kann, wo zB der
> Unterschied zwischen |a| x |a| und a x a ist, wäre ich auch
> glücklich
Also: |a| x |a| meinst du wohl nicht, sondern eher |a|*|a| - das ist ein Unterschied. Denn das "x" benutzt man in der Regel für ein Vektorprodukt und schreibt es normalerweise auch so: [mm] \times. [/mm] Das heißt, man multipliziert zwei Vektoren miteinander und erhält auch einen Vektor. Die Definition des Vektorproduktes findest du hier: Vektorprodukt - allerdings brauchst du sie glaube ich für deine Aufgabe gar nicht.
Was du aber brauchst, ist der Betrag eines Vektors, und wie du diesen berechnest, findest du hier.
Du nimmst also einfach jede Komponente deines Vektors, quadrierst sie, addierst alle zusammen und ziehst dann aus der Summe die Wurzel.
Im ersten Fall, also bei |a|*|a| machst du das zuerst für den Vektor [mm] \vec{a}, [/mm] dann multiplizierst du das Ganze. Im zweiten Fall multiplizierst du erst [mm] \vec{a} [/mm] mit sich selbst (aber nach meiner Formel mit dem Skalarprodukt, d. h. du multiplizierst die erste Komponente von [mm] \vec{a} [/mm] mit der ersten von [mm] \vec{a}, [/mm] die zweite mit der zweiten usw. und addierst am Ende alle zusammen - du erhältst also keinen Vektor, sondern eine Zahl (das ist der Unterschied zum Vektorprodukt!).
Ich fürchte, dass dir diese Erklärung hier auch nicht allzu viel helfen wird. Aber um es dir veständlicher zu machen, wäre es hilfreich, genau zu wissen, was du kannst und weißt (warum schreibst du denn nicht auch in dein Profil, welchen mathematischen Hintergrund du hast???) und wofür du es brauchst. Und: ein Beispiel hilft immer!!! Wenn du also konkrete Zahlen hast - gib sie her!
Viele Grüße
Bastiane
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:56 Mi 16.02.2005 | Autor: | Noop1 |
> Du kannst uns die Fläche auch ruhig direkt angeben! Wenn
> ich ein spezielles Beispiel bekomme, kann ich auch einfach
> mal dran rumprobieren - so fällt mir deine Aufgabe im
> Moment auch etwas schwer...
Hallo!
Das Problem daran ist, ich muss das automatisieren können, also bloß die Winkel von paar konkreten Fällen zu berechnen reicht mir nicht, denn der Computer gibt die Werte und soll sie auch dementsprechend berechnen.
Der mathematische Hintergrund wie, warum und wozu erkläre ich ganz am Schluss.
> Aber was meinst du mit x,y,z?
> Sind das nur die Koordinatenachsen oder hat das noch eine
> weitere Bedeutung?
x, y, z: Ursprung (Anfangspunkt) des Strahls
x1, y1, z1: (Ooops vergessen) Das ist der Schnittpunkt
x2, y2, z2: Endpunkt des Strahls
A-D:(x, y, z): Die 4 Flächenpunkte
[mm] \alpha, \beta: [/mm] Die Winkel
> [mm]\sin{\alpha}=\bruch{|\vec{u}\vec{n}|}{|\vec{u}||\vec{n}|},[/mm]
> wobei [mm]\vec{u}[/mm] der Richtungsvektor der Geraden ist und
> [mm]\vec{n}[/mm] der Normalenvektor der Ebene.
> Ich würde sagen, zuerst musst du also deine Gerade in
> Parameterdarstellung schreiben, und die Ebene in
> Normalenform.
Was ich jetzt in der Zeit raus habe:
für die Fläche:
x1 = (xA-xD)*t + (xB-xD)*s + xD
y1 = (yA-yD)*t + (yB-yD)*s + yD
z1 = (zA-zD)*t + (zB-zD)*s + zD
Und für den Strahl (mmmh wenn ich nachdenke ... da ist ja die Steigung des Strahls günstiger zum Rechnen, also xS,yS,zS für Steigung (xS<0 = links; xS>0 = Rechts usw. und f für "Fortschritt"):
x1 = x + xS*f --- über xS=(x2-x)
y1 = y + yS*f
z1 = z + zS*f
ist das jetzt so gemeint? Der Schnittpunkt dürfte ja kein Problem sein (sofern das was ich jetzt geshrieben habe stimmt), einfach mit Gleichsetzungsverfahren/Einsetzungsverfahren/Substitution nach f, t, s auflösen (das wäre ja für mich "nur" Algebra) und x1, y1, z1 berechnen.
Aber dann wie wohl nun der Winkel ...
> Das sieht ja recht kompliziert aus - sollst du es denn so
> allgemein machen? Oder hast du was Konkretes gegeben?
Der mathematische Hintergrund wie, warum und wozu erkläre ich ganz unten
> Tja, ich fürchte, dann hilft dir meine obige Formel auch
> nicht weiter!?
und zwar deshalb, weil ich (leider) mit den speziellen Symbolen und Funktionen der ähm "Vektoralgebra" nicht vertraut bin (hab zB noch nie Pfeile und keine |'s dafür benutzt, und habe immer die normale "Hauptschulalgebra" für Berechnungen verwendet). Mit Koordinatensysteme in Verbindung normaler Algebra hab ich aber schon öfters gearbeitet.
>
> > Ich hab zwar versucht, das zu ergoogeln, aber ich stolper
>
> > auf Symbole, die ich gar nicht entziffern kann, da ich
>
> > leider nach dem 10. Schuljahr aufgehört habe und es steht
>
> > scheinbar nirgendswo, was diese bedeuten.
> > Also über eine Liste, wo zB ich rauslesen kann, wo zB
> der
> > Unterschied zwischen |a| x |a| und a x a ist, wäre ich
> auch
> > glücklich
> Also: |a| x |a| meinst du wohl nicht, sondern eher |a|*|a|
> - das ist ein Unterschied. Denn das "x" benutzt man in der
> Regel für ein Vektorprodukt und schreibt es normalerweise
> auch so: [mm]\times.[/mm] Das heißt, man multipliziert zwei Vektoren
> miteinander und erhält auch einen Vektor. Die Definition
> des Vektorproduktes findest du hier: Vektorprodukt -
> allerdings brauchst du sie glaube ich für deine Aufgabe gar
> nicht.
> Was du aber brauchst, ist der Betrag eines Vektors, und
> wie du diesen berechnest, findest du
> hier.
> Du nimmst also einfach jede Komponente deines Vektors,
> quadrierst sie, addierst alle zusammen und ziehst dann aus
> der Summe die Wurzel.
> Im ersten Fall, also bei |a|*|a| machst du das zuerst für
> den Vektor [mm]\vec{a},[/mm] dann multiplizierst du das Ganze. Im
> zweiten Fall multiplizierst du erst [mm]\vec{a}[/mm] mit sich selbst
> (aber nach meiner Formel mit dem Skalarprodukt, d. h. du
> multiplizierst die erste Komponente von [mm]\vec{a}[/mm] mit der
> ersten von [mm]\vec{a},[/mm] die zweite mit der zweiten usw. und
> addierst am Ende alle zusammen - du erhältst also keinen
> Vektor, sondern eine Zahl (das ist der Unterschied zum
> Vektorprodukt!).
Also wenn ich 2 Vektoren hätte, x1, y1, z1 für A und x2, y2, z2 für B, wäre das dann n (Zahl) = x1*x2 + y1*y2 + z1*z2 ?
Das nennt sich dann das "Skalarprodukt"?
Und die Länge ist ja wie ich sehe nichts anderes als Pytagoras um a²+b²+c²=d² erweitert, also [mm] \wurzel{x^2 + y^2 + z^2} [/mm] und abstand zwischen zwei dann [mm] \wurzel{(x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2}
[/mm]
So wie ich verstanden habe, nennt sich sowas "Betrag"?
Und wie ich [url=http://www.mathebank.de/tiki-index.php?page=Vektorprodukt]Link-Text /url] interpretiere, müsste ich auch einmal Rechnen
y1*z2 - z1*y2
z1*x2 - x1*z2
x1*y2 - y1*x2
nach meiner Recherche zufolge ist das auch der "Normalvektor" meiner Fläche, der relativ gesehen gerade nach oben zeigt.
Jetzt die Formel:
[mm] \sin{\alpha}=\bruch{|\vec{u}\vec{n}|}{|\vec{u}||\vec{n}|}, [/mm] wobei [mm] \vec{u}
[/mm]
Nur jetzt das Problem, wofür steht denn jetzt das | immer?
> Aber um es dir veständlicher zu machen,
> wäre es hilfreich, genau zu wissen, was du kannst und weißt
> (warum schreibst du denn nicht auch in dein Profil, welchen
> mathematischen Hintergrund du hast???) und wofür du es
> brauchst. Und: ein Beispiel hilft immer!!! Wenn du also
> konkrete Zahlen hast - gib sie her!
Konkrete Zahlen? Leider muss ich das wiegesagt "automatisieren". Aber ich kann mir gerne welche "Ausdenken" A: (-50, 10, 50); B: (50, -10, 50); C: (50, -10, -50); D: (-50, 10, -50); Strahl (-300, 300, 0 nach 5,-1, 0)
Das Problem ist nicht, das ich nicht aufgepasst hätte (hab eigendlich dort immer sehr gute Noten gehabt), sondern das ich diesen Schulstoff für Vektoralgebra nie hatte (bin bis zum Koordinatensystem gekommen) und mich also Privat durchkämpfen müsste.
Der Sache ist nun, ich habe ein 3D-Spiel geschrieben und ich entwickel es aus Spaß weiter.
Eigendlich bin ich immer super mit dem vorhandenen Wissen plus etwas selbst beigebrachten und den "normalen" Winkelfunktionen prima ausgekommen. Was ich brauchte habe ich mir selber zusammengereimt.
Aber spätestens als ich da eine Hügellandschaft da baute oder auch Aufprallwinkel der Spielfigur auf einem nicht geraden Boden, konnte ich leider nicht mehr "einfach so" weiterrechnen wie ich es immer gemacht habe: für die senkrechte nach oben einfach den Y-Wert erhöhen, für Winkel einfach ArcTan(y/x) oder ArcTan(z/x) oder ..., jenachdem ob der Gegenstand hochkant oder flach oder seitlich auf dem Boden liegt ... aber leider ging das alles nur auf geraden Ebenen wo y1=y2=y3=y4 ist, so das ich immer irgendwie in 2D denken konnte und sobald irgendwas nicht mehr Eben ist, also das "oben" nicht mehr "oben" ist, stand ich auf dem Schlauch
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:49 Do 17.02.2005 | Autor: | leduart |
Hallo Noop
Erst mal ein Kompliment! Ich find toll was du alles mit deinem 10. Klasse Hintergrund selbst rausgetüftelt hast. Ich versuch trotzdem einiges ganz primitiv zu erklären, wenns zu simpel ist lies drüber weg!
Erstens kannst du scheints mit Vektoren ganz gut umgehen, du mußt aber aufpassen: Der Vektor [mm] a=(x_{1},y_{1},z_{1}) [/mm] ist der Vektor vom O Punkt zum Punkt A entsprechend [mm] b=(x_{2},y_{2},z_{2}) [/mm] zu B, [mm] c=(x_{3},y_{3},z_{3}) [/mm] zu C. Die Differenzvektoren
[mm] b-a=(x_{2}x_{1},y_{2}y_{1},z_{2}z_{1}), [/mm] c-a liegen in der Ebene vn A,B,C.
Nun nehm ich an, dass deine Hügellandschaft durch lauter Dreiecke gegeben ist, am besten speichert man die gleich mit bzw.parallel zu ihren Normalen ab. Du hast richtig raus, dass das sogenannte Vektorprodukt von 2 Vektoren einen Vektor ergibt, der senkrecht auf den beiden steht. Die Länge des Ergebnisvektors, sein "Betrag" ist der Flächeninhalt des Parallelogramms, das die zwei Vektoren bilden. Im Allgemeinen ist der uninteressant, und man arbeitet lieber mit Vektoren der Länge 1, sgenannten Einheitsvektoren.
Der Betrag des Vektors a geschrieben |a| ist seine Länge, (wie du richtig bemerkt hast ausgerechnet nach Pythagoras) Einen Einheitsvektor macht man , indem man einen Vektor durch seinen Betrag teilt: [mm] e_{a}=\bruch{a}{|a|}
[/mm]
Jetzt hast du noch eine Schwierigkeit, das Vektorprodukt axb steht senkrecht auf a,b aber da gibt es 2 Richtungen. Der Vektor zeigt in die Richtung, in die sich eine Rechtsschraube bewegen würde, wenn man a nach b dreht. deshalb zeigt bxa in die entgegengestzte Richtung!Im Allgemeinen willst du wohl, dass deine Normalenvektoren aus deinem Gebirge nach aussen zeigen, also mußt du aufpassen!
Jetzt zum "Skalarprodukt" so genannt, weil man zwei Vektoren "multipliziert", das Ergebnis eine Zahl (ein Skalar) ist. Das Skalarprodukt a*b ergibt den Anteil von a in b-Richtung mal der Länge von b anders ausgedrückt: [mm] a*b=|a|*|b|*cos\alpha [/mm] wobei [mm] \allpha [/mm] der Winkel zwischen a und b ist. um [mm] cos\alpha [/mm] zu berechnen muß man deshalb [mm] cos\alpha=\bruch{a*b}{|a|*|b|} [/mm] berechnen.
Ich hoffe, du kommst mit den Erklärungen etwas weiter, sonst frag so oft nach,wie dir die Geduld nicht ausgeht!
Gruss leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 21:45 Sa 19.02.2005 | Autor: | Noop1 |
Ah Danke für die Aufklärung ... langsam geht mir ein Licht auf.
Ich bin jetzt so weit (ich schreib das mal ganz aufgeschlüsselt auf ohne irgendwelche "spezialsymbole" aus der Vektoralgebra, damit jeder sehen kann, ob ich auch das ganze korrekte deute):
[mm] x_{1} [/mm] , [mm] x_{2} [/mm] Vektoren, die die Fläche vorgeben (alles besteht bei mir aus 3D-Polygone als Dreiecke, richtig erkannt)
[mm] x_{no} [/mm] Normalvektor (Original)
[mm] x_{n} [/mm] Normalvektor (Einheitsvektor)
[mm] x_{a} [/mm] Objekt, dessen Winkel zur Fläche ausgerechnet werden soll
[mm] w_{r} [/mm] Winkel in Radiant
[mm] x_{no}=y_{1}*z_{2}-z_{1}*y_{2}
[/mm]
[mm] y_{no}=z_{1}*x_{2}-x_{1}*z_{2}
[/mm]
[mm] z_{no}=x_{1}*y_{2}-y_{1}*x_{2}
[/mm]
[mm] f=\wurzel{x_{no}^{2}+y_{no}^{2}+z_{no}^{2}}
[/mm]
[mm] x_{n} [/mm] = [mm] \bruch{x_{no}}{f}
[/mm]
[mm] y_{n} [/mm] = [mm] \bruch{y_{no}}{f}
[/mm]
[mm] z_{n} [/mm] = [mm] \bruch{z_{no}}{f}
[/mm]
[mm] w_{r}=ArcCos\bruch{x_{a}*x_{n}+y_{a}*y_{n}+z_{a}*z_{n}}{ \wurzel{x_{a}^{2}+y_{a}^{2}+z_{a}^{2}}* \wurzel{x_{n}^{2}+y_{n}^{2}+z_{n}^{2}}}
[/mm]
[mm] \pi*0,00 [/mm] = Objekt kommt direkt von oben
[mm] \pi*0,25 [/mm] = Objekt kommt von schräg
[mm] \pi*0,50 [/mm] = Objekt kommt rolt über den Boden
Gibt es da noch ein Fehler?
Mit der Schraube, ist das vielleicht so gemeint, das mein Normalvektor nach unten zeigen würde?
Wenn ja, dann würde ich doch richtig liegen, das ich die Punkte 0-A-B doch bei der Berechnung mit dem Urzeigersinn anstatt gegen den Urzeigersinn angebe, oder?
PS mein Koordinatensystem ist so aufgebaut:
-X: links
+X: rechts
-Y: unten
+Y: oben
-Z: hinten (zurück)
+Z: vorne (nach vorne)
PPS (wer ein Fehler findet in dem Geschreibsel, der möge diesen Fehler melden, am Besten plus Korrektur mir melden, Danke ;)
Sollte meine Berechnung hier jetzt bereits schon zufälligerweise stimmen, werd ich es auch bald merken ...
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:09 Mo 21.02.2005 | Autor: | leduart |
Hallo
Ich seh keinen Fehler. mit der Richtung probier einfach 2 Vektoren in x-y Ebene und stell fest wo das Vektorprodukt hinzeigt in +z oder -z Richtung
gute Nacht leduart
|
|
|
|