Vind Rotatie XYZ van driehoek in 3d

Moderators: dirkwb, Xilvo

Reageer
Berichten: 1

Vind Rotatie XYZ van driehoek in 3d

Beste lezer,

het doel is om een driehoek te verplaatsen in een 3d ruimte.

de nieuwe positie en richting is bekend, de driehoek staat nu in het midden van de ruimte (0,0,0)

maar hoe bereken ik 3 rotatie assen, zodat de driehoek precies tussen de 3 nieuwe punten
het verplaatsen naar en 2 assen lukt me al, maar de 3e/richting niet

de vraag definitie is misschien een beetje vaag, mijn excuses hiervoor,, ik ben slechts een newby op goniometrie gebied die bezig is om een 3d dynamische vorm te programmeren

Gebruikersavatar
Berichten: 2.340

Re: Vind Rotatie XYZ van driehoek in 3d

Dit probleem vereist een redelijk goede kennis van de analytische ruimtemeetkunde.

Stel we hebben de punten ABC die getransformeerd worden naar A'B'C'. Eerste stap is het vinden van het rotatiecentrum. Dit doe je door het vinden van het snijpunt van de middelloodvlakken van AA', BB' en CC'.

Noem het rotatiecentrum O.

De rotatieas is de normaal op het vlak OAA'.

De rotatiehoek is de hoek tussen OA en OA'.

Gebruikersavatar
Berichten: 1.605

Re: Vind Rotatie XYZ van driehoek in 3d

Er bestaan regeltjes/richtlijnen in volgorde van transformaties:

1) Schaling (object groter/kleiner maken)
2) Rotatie (draaien object over: x, y of z-as).
3) Translatie (offset/verschuiving in x, y en/of z-as)
https://computergraphics.stackexchange.com/ schreef:Usually you scale first, then rotate and finally translate. The reason is because usually you want the scaling to happen along the axis of the object and rotation about the center of the object.

Bron: https://computergraphics.stackexchange.com/q/4193

Om dit te doen is rekenen met matrixes volgens mij de meest gebruikte methode. Onderstaand goede Wiki pagina met rotatie matrixes in 2D en 3D: https://en.wikipedia.org/wiki/Rotation_matrix

De 1) vergroting/verkleining en 3) verschuiven is niet zo een groot probleem lijkt me.

Rotatie 2D (over z-as):
$$R={\begin{bmatrix}\cos \theta &-\sin \theta \\\sin \theta &\cos \theta \end{bmatrix}}$$

Rotaties 3D (over x, y of z-as):
$${\begin{alignedat}{1}R_{x}(\theta )&={\begin{bmatrix}1&0&0\\0&\cos \theta &-\sin \theta \\[3pt]0&\sin \theta &\cos \theta \\[3pt]\end{bmatrix}}\\[6pt]R_{y}(\theta )&={\begin{bmatrix}\cos \theta &0&\sin \theta \\[3pt]0&1&0\\[3pt]-\sin \theta &0&\cos \theta \\\end{bmatrix}}\\[6pt]R_{z}(\theta )&={\begin{bmatrix}\cos \theta &-\sin \theta &0\\[3pt]\sin \theta &\cos \theta &0\\[3pt]0&0&1\\\end{bmatrix}}\end{alignedat}}$$

Gebruikersavatar
Berichten: 1.605

Re: Vind Rotatie XYZ van driehoek in 3d

Naar mijn weten:
Grafische kaarten zullen inbouwde routines hebben (ingebakken in chips) welke zulke berekeningen veel sneller doen dan softwarematig. Dan heb je software welke deze hardware aanstuurt.

Misschien kun je info geven welke software/hardware je gebruikt en doelstelling (is die realistisch?). Dan kan men wellicht gericht verder helpen. Handmatig uitrekenen is een goede oefening (en zou ik op zijn minst een keer mee oefenen) echter inefficient qua prestaties.

Werken met geavanceerde 3D bibliotheken vergt veel studie welke methoden er zjin en alle parameters leren kennen. Dan dien je flink in de boeken of het web te duiken en eerst de begrippen leren kennen.

Gebruikersavatar
Berichten: 1.605

Re: Vind Rotatie XYZ van driehoek in 3d

Voorbeeld 2D rotatie met \(\small x\), \(\small y\) (ourde coordinaat) en \(\small x_n\), \(\small y_n\) nieuwe coordinaat:

$${\begin{bmatrix}x_n\\y_n\end{bmatrix}} ={\begin{bmatrix}\cos \theta &-\sin \theta \\\sin \theta &\cos \theta \end{bmatrix}}{\begin{bmatrix}x\\y\end{bmatrix}}={\begin{bmatrix}x\cos \theta -y\sin \theta \\x\sin \theta +y\cos \theta \end{bmatrix}}$$
$$x_n=x\cos \theta -y\sin \theta$$
$$ y_n=x\sin \theta +y\cos \theta$$

Vergelijkbaar voor 3D krijg je dan de monsterformule:
$${\begin{bmatrix}x_n\\y_n\\z_n \end{bmatrix}} = {\begin{bmatrix}\cos \gamma &-\sin \gamma &0\\\sin \gamma &\cos \gamma &0\\0&0&1\\\end{bmatrix}}{\begin{bmatrix}\cos \beta &0&\sin \beta \\0&1&0\\-\sin \beta &0&\cos \beta \\\end{bmatrix}}{\begin{bmatrix}1&0&0\\0&\cos \alpha &-\sin \alpha \\0&\sin \alpha &\cos \alpha \\\end{bmatrix}} {\begin{bmatrix}x\\y\\z \end{bmatrix}}$$

Oplossing volgens wolfram alpha: Wolfram Alpha. Via:

Code: Selecteer alles

{{cos(a),-sin(a),0},{sin(a),cos(a),0},{0,0,1}}*{{cos(b),0,sin(b)},{0,1,0},{-sin(b),0,cos(b)}}*{{1,0,0},{0,cos(c),-sin(c)},{0,sin(c),cos(c)}}*{{x},{y},{z}}
3D Rotatie.jpg
De onderstaande formule in foto is de omrekening. Als ik geen blunder en type fout maak! :oops:

Gebruikersavatar
Berichten: 1.605

Re: Vind Rotatie XYZ van driehoek in 3d

Nu toch de tijd genomen en de uitkomst uitgetypt en uitkomst WA gecontroleerd:
$$\small {\begin{bmatrix}x_n\\y_n\\z_n \end{bmatrix}} = {\begin{bmatrix}\cos \gamma &-\sin \gamma &0\\\sin \gamma &\cos \gamma &0\\0&0&1\\\end{bmatrix}}{\begin{bmatrix}\cos \beta &0&\sin \beta \\0&1&0\\-\sin \beta &0&\cos \beta \\\end{bmatrix}}{\begin{bmatrix}1&0&0\\0&\cos \alpha &-\sin \alpha \\0&\sin \alpha &\cos \alpha \\\end{bmatrix}} {\begin{bmatrix}x\\y\\z \end{bmatrix}}$$ $$\small {\begin{bmatrix}x_n\\y_n\\z_n \end{bmatrix}} = \begin{bmatrix} y (\cos \gamma \sin \beta \sin \alpha - \sin \gamma \cos \alpha ) + z (\cos \gamma \sin \beta \cos \alpha + \sin \gamma \sin \alpha ) + x \cos \gamma \cos \beta \\ y (\sin \gamma \sin \beta \sin \alpha + \cos \gamma \cos \alpha ) + z (\sin \gamma \sin \beta \cos \alpha - \cos \gamma \sin \alpha ) + x \sin \gamma \cos \beta \\ y \cos \beta \sin \alpha + z \cos \beta \cos \alpha - x \sin \beta \\\end{bmatrix}$$
Een 2D rotatie is rond de \(\small z\)-as (hoewel men deze niet "ziet"). Met: \(\small \alpha=0\) en \(\small \beta=0\). Dit geeft:
$$x_n=x\cos \gamma -y\sin \gamma $$ $$y_n=x\sin \gamma +y\cos \gamma $$ $$z_n=z$$Dit komt overeen met de 2D rotatie formule, en de genoteerde formule lijkt te kloppen. De \(\small z\)-waarde blijft gehouden \(\small z\). Maar dat doet er niet toe in 2D. Dus \(\small \alpha\) is rotatie om \(\small x\)-as. \(\small \beta \) om \(\small y\)-as en \(\small \gamma\) om \(\small z\)-as.

Ik vermoed/gok dat er ook benadering formules zijn. Hier heb ik geen actieve zoektocht op ondernomen. Maar zul jezelf of iemand anders moeten uitzoeken.

Laat even weten of dit heeft geholpen dusver.

Gebruikersavatar
Berichten: 2.340

Re: Vind Rotatie XYZ van driehoek in 3d

Ik denk dat de doelstelling van de oefening het omgekeerde is, je krijgt de getransformeerd driehoek en je moet de hoeken vinden. Jouw formules zijn er ook op gericht om te roteren rond de oorsprong, in het algemeen kan het zijn dat je ook rond een ander punt moet roteren.

Gebruikersavatar
Berichten: 1.605

Re: Vind Rotatie XYZ van driehoek in 3d

Volgens TS in 0, 0, 0. Volgens richtlijnen in mijn eerste post. 1) Vergroten/verkleimen, 2) Roteren, 3) verschuiven.

Maar roteren over willekeurig punt. Zou ik massamiddelpunt bepalen eerst transleren en dan roteren. Maar dat uit eigen gevoel/inzicht.

Maar inderdaad TS is de enige die antwoord kan geven. Maar dit zijn de basis tools wat je eerst dient te begrijpen volgens mij .

Reageer