![]() |
---|
Schönen guten Tag, Ich brauche hilfe bei folgendem Problem: Ich möchte in einem Kugelkoordinatensystem die Punkte bestimmen die eine Fläche die im punkt liegt und verdreht ist. Die Verdrehung möchte ich mit einem Normalenvektor ausdrücken. Die Fläche ist unendlich groß. Ich möchte nun die Punkte berechnen . bei 0°,45°,90°,135°,180° usw. Die Winkel sollen auf der Fläche liegen, hänge noch ein Bild mit dran ist schwer in Worte beschreiben. Man könnte das so beschreiben das man eine CD nimmt und den Mittelpunkt der CD in den Mittepunkt des Kugelkoordinatensystems packt. Auf der CD sind die entsprechenden Grad zeilen aufgedruckt und nun möchte man wissen Welchen Punkt . 30° abbildet im Raum. Will das ganze natürlich auch verstehen, fals noch Fragen sind gerne stellen. Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
Hierzu passend bei OnlineMathe: Bestimmtes Integral (Mathematischer Grundbegriff) Flächenberechnung durch Integrieren Online-Übungen (Übungsaufgaben) bei unterricht.de: |
![]() |
![]() |
Hallo so wie du die Drehung beschreibst sind 0 und 180° doch weiter auf der Achse, die 90° und durch beschrieben, wenn die Richtung nach oben zeigt,, und der Winkel zur x-x-Ebene ist. oder ich hab deine Frage nicht verstanden. Was hat das dann mit Kugelkoordinaten zu tun? Deine Kugel hat doch einfach nen anderen Äquator? Gruss ledum |
![]() |
Also ich verstehe es folgendermaßen: Kugel mit Mittelpunkt im Ursprung und Ebene die durch den Ursprung verläuft. Initial sagen wir eine der Ebenen, die durch zwei Koordinatenachsen beschrieben werden. Dann initial gesetzt, die Geradenen durch den Ursprung, die in der Ebene liegen und im ensprechenden Winkel zu einer initialen Gerade aus der Ebene(vermutlich beliebig gewählt) abgehen. Die Schnittpunkte dieser Geraden mit der Kugel. Nun kippt man die Ebene, wodurch sich auch die Geradenen ändern, in eine bestimmte Richtung um einen bestimmten Wert. Nun will man die Schnittpunkte der mitgekippten Geradenen mit der Kugel haben? Oder einfach den Schnittkreis von Ebene und Kugel bzgl. der Kippung? lg |
![]() |
Also Levis antwort passt ca, Ich möchte nicht alle Schnittpunkte der Fläche mit dem Kreis haben, denn das sind ja schließlich unendlich, sondern nur die jenigen die . bei 0°,90°usw liegen. Man muss sich vorstellen das auf der Fläche eine gradanzeige gedruckt wird, und dann möchte ich einen grad abstand wählen . und dann kann ich damit den Punkt bestimmen. Also genau deinen Schnittkreis @Levis nur nicht alle werte sondern nur 4 bei 90Grad. bei 45Grad sind es dann 8 Werte. |
![]() |
Vielleicht fangen wir einmal mit einfachen Rückfragen an. Deine CD habe den Radius 1 und wir bewegen uns zunächst mal nur im kartesichen Koordinatensystem. Wenn der Normalvektor der CD-Ebene ist, wo soll dann der Punkt auf der CD, für den der von dir ins Spiel gebrachte Winkel ist, liegen? Und wo liegt der Punkt der dem Winkel entspricht. Ich vermute nach deinem Bild, dass also auf der positiven y-Achse und auf der negativen, nach "hinten" weisenden x-Achse liegen. Betrachten wir nun den Normalvektor . Wir haben die CD also umgedreht und sie liegt nur am "Rücken", aber wieder in der Grundrißebene. Wo liegt jetzt ?? Das ist nicht eindeutig eruierbar und hängt nun nämlich davon ab, WIE wir die CD umgedreht haben. Anders ausgedrückt: Der Normvektor legt zwar die Lage der CD-Ebene fest, aber diese ist noch immer beliebig in sich selbst verdrehbar, sodass es für die Lage deiner Gradeinteilung einer zusätzlichen Reglung bedarf - WELCHER? Möchtest du uns nicht verraten, welchen Hintergrund deine Aufgabenstellung hat? |
![]() |
Also ich brauche das ganze dafür um ein Mesh zu erzeugen. Ich programmiere derzeit in Unity mit meinen ViveControllern rum und möchte eine Röhre erzeugen indem ich die Controller durch den Raum bewege. Ich habe nur Postionen der ViveController und möchte um diese Positionen ein Mesh bauen in Form eine Röhre. Dafür benötige ich allerdings alle eckpunkte des Meshes. Zu deinen Fragen Roman, Bei einem NormalVektor und 90° sollte der punkt auf dem kreis bei liegen. Eigentlich sollte es egal sein wie rum die scheibe gedreht ist bei eine geraden anzahl von Positionen die ich haben möchte. Hoffe ich zumindest. zu deiner Regel die ich benötige: Deswegen habe ich gehofft das das ganze im Kugelkoordinaten system zu lösen ist da ich dort festgelegte regeln habe wo . 90° ist. |
![]() |
Was denn jetzt, einen Mesh in Form einer "Röhre" ( Zylinder ) oder einer "Kugel"? (Oder die "Randpunkte bzgl. Position" nehmen und abspeichern um daraus dann eine "Röhre" zu bauen?) Wenn es nur ein Mesh bzgl. "Kollisionsabfragen" (bzw. ob etwas entsprechend nah am Kontroller ist) sein soll, reicht es dann nicht nur die Position der festgelegten Struktur zu bewegen? Oder ist es wichtig, dass eine Drehung des Kontrollers zu einer Drehung des Meshs führt? Bzgl. Kollision wären das ja keine allzugroßen Änderungen, da das Mesh ansich ja schon sehr ungenau ist (Unter der Annahme, dass es den Kontroller komplett umschließt)! Und bzgl. dem produzieren dieser Röhre ist es ja auch nicht unbedingt wichtig. Man kann ja mit der Bewegungsrichtung und einem Punkt mit größtem Abstand (bestimmtem Abstand zur Bewegungsgeraden eine "Röhre" mit Radius erzeugen. Wobei die Drehung des Kontrollers ja keine Rolle spielt, solange es egal ist wo ein Punkt auf der "Röhre" liegen soll, solange er auf dieser liegt. |
![]() |
Eigentlich sollte es egal sein wie rum die scheibe gedreht ist bei eine geraden anzahl von Positionen die ich haben möchte. Hoffe ich zumindest. Na, das ist sicher nicht egal! Und mit der Anzahl der markierten Positionen hat das ja auch nix zu tun. Lege deine Scheibe in eine gedrehte/gekippte Lage. Dann steht auf der Scheibe irgendwo 0°. Und jetzt verdrehst du die Scheibe um, zB, 25°. Dann landen doch alle deine Winkelbezeichnungen an anderen Positionen. Deswegen habe ich gehofft das das ganze im Kugelkoordinaten system zu lösen ist da ich dort festgelegte regeln habe wo . 90° ist. ??????????????? Die beiden Winkel im Kugelkoordinatensystem sind natürlich eindeutig definiert, aber die haben doch nichts mit deinem Winkel auf der Scheibe zu tun! Da musst du doch wissen, wie du es haben möchtest und es dann eben entsprechend festlegen. Oder möchtest du vielleicht deinen Winkelmesser doch nicht auf der "CD" aufmalen, wie du erst geschrieben hast, sondern willst vielmehr wissen, welche Punkte des Schnittkreises den Azimutwinkel (jetzt sind wir bei den Kugelkoordinaten) 0°, 90°, etc. haben, suchts also von diesen Punkten nur noch den Polarwinkel?? Nebenbei gesagt sind die Kugelkoordinaten doch nicht ganz so eindeutig festgelegt, da man, gerade was den Azimutwinkel anlangt, dafür sowohl den Bereich als auch verwendet. |
![]() |
@Levis Zitat:"Oder die "Randpunkte bzgl. Position" nehmen und abspeichern um daraus dann eine "Röhre" zu bauen?" Ja genau das Bau mir im Moment mit dem Kugelkoordinatensystem die erste Grundfläche. Das Mesh in kleine Collider zu ersetzen wird nicht gut funktionieren da ich das ganze benutzen möchte um bestimmte Aktionen auszuführen wenn der Controller sich innerhalb dieser Röhre aufhält. Die Röhre soll einmal erstellt werden und dann speicher ich sie ab um sie nachher zum überprüfen bereit habe. Die Drehung des Kontrollers wird nicht mit berücksichtigt nur die Position @Roman Dachte du meinst mir der Drehung der Fläche um 180° also gespiegelt. Was nur funktionieren kann wen sie Symmetrisch ist. |
![]() |
Hm, dann kannst du doch einfach mit einem entsprechendem Radius die Röhre erstellen. Die Drehung des Kontrollers spielt ja keine Rolle! Zeitintervalle bis Richtungsgerade Radius einige Punkte mit Abstand auf Ebene die senkrecht auf Richtungsgerade steht abspeichern. Das für gewünschte "Röhre" durchführen. Zeitintervall entsprechender Genauigkeit wählen. Das ganze etwas runden um Speicherplatz zu sparen und fertig. Oder alternativ eine entsprechende Annäherungsfunktion für den Verlauf der Ortskoordinaten erstellen. Ansich ist dann nur letzteres ein "größeres" mathematisches Problem. lg |
![]() |
Und das Polynomennetz für den Kontroller, kannst du ja fest wählen, da die Drehung des Kontrollers unwichtig ist, würde sich dieses Netz nur im Verhältnis zu den Ortskoordinaten verschieben. |
![]() |
@Roman Dachte du meinst mir der Drehung der Fläche um 180° also gespiegelt. ? Wovon genau sprichst du da. Von meiner ersten Rückfrage? Denn da hatte ich einen ganz konkreten Normalvektor angegeben, der zB durch eine Drehung um 180° erzeugt werden kann. Die zugehörige Frage hast ja nicht beantwortet. Was nur funktionieren kann wen sie Symmetrisch ist. ????????????????? WAS kann nur funktionieren, wenn WER symmetrisch WOZU ist? Denke aber mittlerweile auch, dass das Problem viel einfacher und weniger mathematischer Natur ist und du die ursprünglich gewünschten Koordinaten welche und wie auch immer du sie dir vorgestellt hast) nicht wirklich benötigst. |
![]() |
Zeitintervalle bis Richtungsgerade Radius → einige Punkte mit Abstand auf Ebene die senkrecht auf Richtungsgerade steht abspeichern. Wie bekomme ich das denn hin? Habe ja nur einen Richtungsvektor? Und was meinst du mit Runden? Runden bekomme ich es doch wenn ich die Zeitintervalle, wenn ich das halbwegs richtig verstanden habe, verkleinere. Habe es jetzt so verstanden das du ausgehend von dem Vektor eine Orhogonale Ebene baust(wie weiß ich nicht) und dann Punkte bestimmst die einen bestimmten abstand haben und sich der Zeiger der auf die Punkte zeigt dreht und man jedes xte Zeitintervall berechnet. hab ich das so richtig verstanden? |
![]() |
Auf dem Kreis ansich kannst du ja folgendermaßen vorgehen: Beliebige Gerade für zwei Punkte, dann die Gerade in der Ebene um . 10° drehen bis 180° dann hättest du Punkte, den Bereich kleiner wählen . 5° für eine höhere Genauigkeit für den Kreis, der durch diese Punkte beschrieben wird. Die Ortskoordinaten sind klar. Der Richtungsvektor steht für den Normalenvektor der Ebene. Den Richtungsvektor erhält man durch zwei Ortskoordinaten. . du brauchst zwei Zeitpunkte. Je kleiner du den Abstand dieser Zeitpunkte wählst desto genauer wird das ganze. Bzgl. dem Runden: Minimale Änderungen können ja unberücksichtigt bleiben, . wenn ich den Kontroller bewege, werde ich mit entsprechender Genauigkeit auch kleine Zitterbewegungen mitaufnehmen. Bezeichnen wir es nicht als "runden" sondern vielmehr als glätten. Das trifft denke ich eher auf das zu was ich meine. . größere Ausschläge versuche ich anzupassen, das sollte man dann im Nachhinein erledigen. Bzgl. der Mathematik. Das einzige "größere" Problem (jedenfalls für mich) ist ja hier die Gerade in der Ebene zu drehen um den Mittelpunkt um einen bestimmten Wert in eine bestimmte Richtung. Das sollte aber im Prinzip nicht alzu schwer sein. |
![]() |
Hm und ich gehe mal davon aus, dass das ganze sowieso recht gleichförmig, im Sinne von "geschwungen" sein soll, also keine Zick-zack Bewegungen. Dann braucht man das ganze ja nur recht grob, also mit geringer Genauigkeit aufzuzeichnen. Du sagst ja, dass du nur EIN Gitternetz bezüglich dieser "Röhre" brauchst. Das ganze soll ja keiner ständigen Abfrage unterliegen, sondern nur einmal manuell aufgebaut und entsprechend aufgezeichnet werden. Wenn ich das richtig verstanden habe. Auch ist das ganze nur eine "einfache" Möglichkeit wie ich sie mir ausgedacht habe; Bin mir ziehmlich sicher, dass es Software gibt, die das besser löst :-) , besonders wenn sie auf die Hardware angepasst ist. Aber ich denke zum "rumprobieren" wird das so reichen? lg |
![]() |
Ja soll nur einmal aufgebaut werden und fertig. Nur wie bekomme ich jetzt aus einem Ortsvektor eine Orthogonal liegende Linie? Schließlich gibt es ja unendlich viele und ich brauch nur eine. Und wie kann ich diese drehen? Sry aber meine Mathekünste sind etwas eingerostet^^ |
![]() |
Also zwei naheligende Zeitpunkte und entsprechend einer Intervalllänge . Normalenvektor der Ebene ergibt sich aus dem Richtungsvektor (Ortsvektor zum Zeitpunkt (normiert) www.mathebibel.de/normalenform-in-koordinatenform Wir wählen eine beliebige Gerade mit Richtungsvektor in der Ebenen, die durch verläuft. Weitere gedrehte Vektoren bekommt man mit dem Kreuzprodukt (Das Kreuzprodukt zweier Vektoren produziert einen Vektor, der senkrecht auf beiden steht!). Der Richtungsvektor der neuen Gerade sei dann gilt ja: Man kann die Länge der Vektoren ja dann auf den gewollten Radius festlegen: Das ganze liefert einem dann ein LGS mit 3 Gleichungen. Zu bestimmen sind dann "Koordinaten"-Werte von entsprechend dem gewähltem Winkel. Im folgendem tut man das dann weiter für Zeitpunkte und usw. Die Punkte speicherst du dann entsprechend ab. . für obige Punkte, die durch die errechneten Vektoren entstanden sind. Am Ende erhalte ich dann ein Gitternetz in Form einer Röhre. lg (Korrigiert mich wenn die Mathematik falsch ist!) |
![]() |
Ich hänge immer noch an dem Problem das ich keine beliebige gerade durch den Punkt bekomme dir Orthogonal zu dem Richtungsvektor ist. Sagen wir ich habe den Punkt und Dann habe ich den Richtungsvektor . wie bekomme ich jetzt daraus den Orthogonalen Vektor der durch den Punkt geht aber rechtwinklig zum Richtungsvektor ist. Und wie Drehe ich dann diesen Vektor um die Achse von dem Vektor R? Die Drehung muss dann in schritten erfolgen . 45°. Da ja ein Richtungsvektor ist ist es ja auch gleichzeitig mein Punkt den ich haben möchte, bzw muss der nur noch addiert werden mit dem entsprechendem Ursprungspunkt. |
![]() |
Du hast ja den Punkt durch den die Ebene laufen soll gegeben. Einer der Punkte mit denen du den Richtungsvektor errechnet hast. Daraus lässt sich dann eine Normalengleichung für die Ebene erstellen: Wenn du das ganze in die Parameterform umwandelst, erhälst du automatisch 2 Vektoren, die in der Ebene liegen. Wie man das macht steht hier: www.mathebibel.de/normalenform-in-parameterform (Achtung etwas weiter unten für Dann kannst du einen der beiden Vektoren nehmen und diesen so wie ich es oben beschrieben habe rotieren lassen, mit dem gewähltem Vektor als Ausgang. Sprich Methode m(ortsvektor1, ortsvektor2): (normiert) Wandle in Parameterform um und wähle einen der beiden Vektoren (jetzt habe ich einen Vektor und den normierten Normalenvektor Vektor auf Länge bringen und es gilt LGS: nach auflösen (also bestimmen für Winkel . 10°, 20°, 170°) diese Vektoren auf aufadiert liefert mir Punkte, die in der Ebene liegen und Abstand zu haben. Sprich Punkte die auf dem Kreis in der Ebene mit Mittelpunkt und Radius liegen. Abspeichern Aufnehmen über einen Zeitraum liefert mir ein Gitternetz in Form einer "Röhre" Ah, die Mathematik oben bzgl. dem Drehen ist vermutlich falsch.. Stichpunkt wie es richtig geht wäre wohl: de.wikipedia.org/wiki/Drehmatrix lg |
![]() |
also ich habe jetzt folgende Koordinatenform: ist der Richtungsvektor der Unbekannte Vektor und mein Punkt der in der Fläche liegt Dann habe ich das in die Parameterform umgewandelt: Habe dafür diese Seite benutzt de.serlo.org/mathe/geometrie/analytische-geometrie/ebenen/umwandlung-ebenendarstellung/ebene-normalform-parameterform-umwandeln Ich darf halt nicht mit zahlen rechnen da ich das ganze ja scripten muss, ist übrigens c#. Habe ich das soweit richtig gemacht und was mach ich jetzt mit dem Spaß. Laut deiner Erklärung müsste ich jetzt 2 Vektoren haben. Meinst du die beiden die jeweils nach und stehen? Wenn ja wie setze ich diese in dein Gleichungssystem ein und löse es nach den Vektor auf? Der radius ist . Sehe gerade das ich die Vektoren noch normieren müsste. Also beim Anfang einfach den Vektor und normieren richtig? |
![]() |
Also: Ich habe es jetzt folgendermaßen gemacht und das scheint so auch korrekt zu funktionieren: Idee war: Aus dem Richtungsvektor und einem Vektor der in der Ebene liegt durch das Kreuzprodukt einen dritten Vektor zu erhalten, der senkrecht auf den beiden steht. Ansich befindet man sich ja in einer Ebene, . wenn man zwei Vektoren betrachtet, die an einem Punkt angelegt sind, dann kann man ja von der Spitze des einen Vektors auf den anderen runterlooten und somit ein rechtwinkliges Dreieck schaffen mit einem Winkel zwischen den Vektoren(solange <90°). Ich nenne die Gegenkathetenlänge . Dann ist für Wobei obiges ist, was senkrecht auf und steht. So kann ich also die Länge von bestimmen durch: da der Punkt ja Abstand haben soll. Damit erhalte ich durch Addition von: den Punkt, der auf einer Geraden liegt (durch Mittelpunkt die einen Winkel von zu hat. Mit erhalte ich dann den Punkt auf dieser Geraden mit Abstand zum Ursprung (bzw. nach verschieben zu . Das kann ich dann mal wiederholen, mit dem letztem Vektor durch Punkt und Ursprung als mein . Damit hab ich mich einmal um den Ursprung gedreht. Verschiebe ich die dann wieder um hab ich meine "Kreispunkte". Am einfachsten geht das ganze wie gesagt mit der Drehmatrix. Allerdings blick ich da selber noch nicht ganz durch, wie man die Dinger benutzt... Evtl. einen neuen Thread aufmachen zu: Punkt mit Drehmatrix um Ursprungsgerade drehen. Im Anhang noch Bilder von mir zur Implementierung meiner Idee mit Java. Ich denke es sollte zu auf ca. 5 Nachkommastellen genau sein. Ich kann nicht garantieren ob das ganz korrekt ist! Ich empfehle es trotzallem mit der Drehmatrix zu machen, das sollte sauberer sein... lg |
![]() |
Ok, was mir dann auch gerade eingefallen ist... Mit dem Sinussatz gehts ja dann noch einfacher. Wir haben ja ein Dreieck wobei 2 Seitenlängen (Länge und ein Winkel (gewünschte Winkel-Schrittweite) zwischen diesen Seiten gegeben ist. Oder eben mit der Drehmatrix. Allerdings wäre das mit dem Sinussatz vermutlich der mit geringste Rechenaufwandt. Wobei Drehmatrix recht viel sein wird. lg |
![]() |
Tausend dank an dir Levis, habe das ganze jetzt in Unity eingegeben und es funktioniert genau so wie ich mir das vorgestellt habe. Vielen vielen Dank für deine tolle Hilfe hätte das ja alleine nie hinbekommen ;-) |