Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Eine Ellipse berechnen

Eine Ellipse berechnen

Universität / Fachhochschule

Körper

angewandte lineare Algebra

Vektorräume

Tags: Angewandte Lineare Algebra, Körper, Vektorraum

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
Fragerich

Fragerich aktiv_icon

20:44 Uhr, 22.03.2010

Antworten

Guten Tag,

ich möchte für ein Projekt aus dem Bereich der Informatik eine 2-dimensionale Ellipse in ein 3-dimensionales Feld zeichnen. Die ganze Erzeugung der Ellipse soll in eine Funktion gekapselt werden die folgende Parameter besitzt:

Mittelpunkt [m], Maximaler Durchmesser [dmax], Minimaler Durchmesser [dmin], Neigung der Ellipsenebene zur z-Achse [zAngle], Ausrichtung der Ellipse zur xy-Ebene [xyAngle], Anzahl der Punkte die auf der Ellipse berechnet werden sollen [count], zeitliches Interval zwischen den Punktberechnungen [interval], callback-Funktion die nach der Berechnung eines jeden Punktes aufgerufen wird [code].

Also:

CreateEllipse(mx,my,mz,dmax,dmin,zAngle,xyAngle,count,interval,code)

s t e p = L ä n g e d e s U m k r e i s e s c o u n t

Um [step] wird der Iterator immer erhöht.

Nun meine eigentliche Frage:

Wie rechne ich all diese Daten um damit ich die 'normale' Parametergleichung einer Ellipse damit füttern kann?

Hoffe ich konnte mein Problem klarstellen und das ihr mir helfen könnt.

MfG


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:

Online-Übungen (Übungsaufgaben) bei unterricht.de:
 
Online-Nachhilfe in Mathematik
Antwort
MBler07

MBler07 aktiv_icon

13:53 Uhr, 27.03.2010

Antworten
Hi

da bisher noch niemand geantwortet hab, geb ich einfach mal ein paar Hinweise. Eine komplette Lösung kann ich dir momentan nicht geben. Dafür müsst ich mich nochmal etwas in das Thema einlesen.

Was du machen willst nennt sich Koordiantentransformation. Dazu findet sich einiges im Internet. Unter der "normalen" Ellipsengleichung verstehst du die kartesiche Form x2a2+y2b2=1 ?!

Dein zAngle wäre eine Rotation um die x-Achse, der xyAngle eine um die y-Achse. Zumindest soweit ich das verstehe. Dazu kommt noch die Translation.

Im Prinzip legst du also ein Koordinatensystem mit einer Ursprungsellipse in das dreidimensionale Ks und rechnest di Koordinaten um. Am Ende hast du dann was in der Art
x=Ax'

Wobei x die Koordinaten der Ellipse im geforderten Ks sind, A die Transformationsmatrix und x' die Koordinaten der Ursprungsellipse.

Um das zu erreichen muss din Programm allerdings die Berechnung trigonometrischer Funktionen beherschen.

Hoffe das hilft dir etwas weiter.

Grüße
Fragerich

Fragerich aktiv_icon

14:36 Uhr, 28.03.2010

Antworten
Oh, Entschuldigung. Ich vergaß zu sagen, dass ich von der Parameterform einer Ellipse ausgehe:
http//de.wikipedia.org/wiki/Ellipse#Ellipsengleichung_.28Parameterform.29

Ich versuche das mit den Winkeln noch einmal deutlich zu machen:
zAngle rotiert die rotiert die Ellipse um die x-Achse und xyAngle rotiert x- und y-Achse um die z-Achse.

Man stelle sich zuerst eine horizontale Ellipse (sprich parallel zu x- und y-Achse und orthogonal zu z-Achse). Nun ist zB zAngle = 45° und xyAngle 0°, das heißt der östlichste Punkt (0° Osten) wird 45° nach unten und der westlichste (180° Westen) 45° nach oben verschoben. Wäre xyAngle 180° und zAngle = 45° würde der westlichste Punkt nach unten und der östlichste Punkt nach oben verschoben werden.
Ist xyAngle 90° so wird der nördlichste Punkt nach unten verschoben.. etc.

Mein Programm kann leider nur Basisoperationen und die Gleichung sollte auch relativ schnell zu lösen sein.

Ich versuche zu verdeutlichen wie ich mir das ganze denke:

loop
x= mx + Cos(currAngle) radius
y= my + Sin(currAngle) radius
currAngle = currAngle + step
endloop

Die obige Schleife generiert alle gewünschten Punkte eines 2-dimensionalen Kreises.

loop
x= mx + Cos(currAngle)*Abs(Cos(zAngle)) radius
y= my + Sin(currAngle)*Abs(Cos(zAngle)) radius
z= mz + Cos(xyAngle-currAngle)*Sin(zAngle) radius
currAngle = currAngle + step
endloop

Nun habe ich diese um z- und xy-Angle erweitert. Wie man sieht wird die x,y-Verschiebung (Zeile 2 und 3) schwächer umso horizontaler die Ellipse wird (zAngle gegen 90° oder 270°) während die z-Verschiebung stärker wird. Das Problem an dieser Formel ist, dass wenn zAngle = 90° ist (also der Kreis senkrecht steht) eine gerade Linie nach oben (bzw. unten) entsteht, da die x,y-Verschiebung exakt 0 wird. Es fehlt nur ein paar Faktoren die, die zu extreme Wirkung von cos(zAngle) ausgleichen..

Hoffe es ist nun klarer :-)

MfG

Antwort
MBler07

MBler07 aktiv_icon

21:54 Uhr, 30.03.2010

Antworten
Dann habe ich also nur den xyAngle falsch verstanden.

Also ich komme momentan auch auf keine Lösung. Bisher schaffe ich es nur die Ellipse im R2 zu drehen und zu verschieben. Mit der dritten Achse wird das ganze wesentlich schwieriger. Ich schreib die mal auf, wie das bei mir im zweidimesionalen aussieht:

Original:
x'=...
y'=...

Verschoben:
x=Mx+x'
y=My+y'

gedreht:
(xy)=(cos(φ)-sin(φ)sin(φ)cos(φ))(x'y')

Bzw.

x=x'cos(φ)-y'sin(φ)
y=x'sin(φ)+y'cos(φ)

Ich behaupte mal, dass bei deiner Lösung die Ellipse verzehrt wird. Aber sicher bin ich mir nicht. Hast du mal ein Bild, wie das ganze aussieht? Wie bist du auf diese Formel gekommen?

Was hälst du von meinem Vorschlag?

Wie man das ganze um eine Dimension erweitern kann, überleg ich mir nochmal.
Fragerich

Fragerich aktiv_icon

16:08 Uhr, 31.03.2010

Antworten
> Also ich komme momentan auch auf keine Lösung. Bisher schaffe ich es nur die Ellipse im R2 zu drehen und zu verschieben. Mit der dritten Achse wird das ganze wesentlich schwieriger

:-D), richtig.

>
gedreht:
(xy)=(cos(φ)-sin(φ)sin(φ)cos(φ))⋅(x'y')

Bzw.

x=x'⋅cos(φ)-y'⋅sin(φ)
y=x'⋅sin(φ)+y'⋅cos(φ)

Interessant! Ich hab jetzt gerade keine Zeit, aber vielleicht hilft mir das weiter, ich setze mich später daran.

> Ich behaupte mal, dass bei deiner Lösung die Ellipse verzehrt wird. Aber sicher bin ich mir nicht.

Ja, die Ellipse wird verzerrt, im Grunde ist genau das das Problem.

> Hast du mal ein Bild, wie das ganze aussieht?

Bilder angehängt, habe es in Wc3 implementiert :-)

> Wie bist du auf diese Formel gekommen?

Naja, ich hab mir gedacht, wenn der Kreis horizontal sein soll (zAngle = 0°) dann ist die Gleichung z= mz + vz genau mz. Also muss vz 0 sein. Also muss das Produkt vz den Faktor Sinus(zAngle) beinhalten. Dieser wird nämlich genau bei [zAngle =0]0 und bei [zAngle =90]1, was ja auch richtig ist, weil beim 100% senkrechten Kreis vz maximal wird.
Naja und dementsprechen verringere ich vx und vy durch Cosinus(zAngle) damit genau dann wenn Sinus(zAngle) stark wird (also auch vz), dass dann vx und vy proportional schwächer werden.

(Du hast mich übrigens gerade darauf gebracht, dass ja vx und vy ja eigentlich nur um SquareRoot(Cosinus(zAngle)) verringert werden dürfen, sonst wäre es ja nicht proportional)

Also ich gehe im Moment übrigens noch vom Kreis aus, das ist einfacher und die Lösung für den Kreis sollte man eigentlich auf die Ellipse übertragen können.








look1
look2
look3
Antwort
ahmedhos

ahmedhos aktiv_icon

04:53 Uhr, 01.04.2010

Antworten
Hallo zusammen,

Die Parameterform der Ellipse wäre:
v(t)=(x(t)y(t)z(t))=(acos(t)bsin(t)0)
mit 0t2π

v'(t)=Av(t)=A(acos(t)bsin(t)0)
wobei A eine Drehungmatrix des 3 darstellt. Für Drehungsmatrizen, Winkel usw. kann man hier schauen:

http//de.wikipedia.org/wiki/Eulersche_Winkel
http//www.itp.tu-berlin.de/menue/lehre/owl/mechanik/euler_winkel/
http//mathworld.wolfram.com/EulerAngles.html
http//mathworld.wolfram.com/Rotation.html
http//mathworld.wolfram.com/RotationMatrix.html
http//www.chemgapedia.de/vsengine/vlu/vsc/de/ma/1/mc/ma_11/ma_11_03/ma_11_03_02.vlu/Page/vsc/de/ma/1/mc/ma_11/ma_11_03/ma_11_03_10.vscml.html
Fragerich

Fragerich aktiv_icon

18:08 Uhr, 01.04.2010

Antworten

D r e h u n g u m x A c h s e : ( 1 0 0 0 cos ( α ) sin ( α ) sin ( α ) 0 cos ( α ) ) D r e h u n g u m z A c h s e : ( cos ( α ) sin ( α ) 0 sin ( α ) cos ( α ) 0 0 0 1 )

// aus Wikipedia de.wikipedia.org/wiki/Drehmatrix]

kombiniert mit der Ellipsengleichung wäre das:

( x y z ) ( t ) = ( 1 0 0 0 cos ( α ) sin ( α ) sin ( α ) 0 cos ( α ) ) ( cos ( α ) sin ( α ) 0 sin ( α ) cos ( α ) 0 0 0 1 ) ( a cos ( t ) b sin ( t ) 0 )

Also ist das die Lösung? Naja dann werde ich gleichmal versuchen das zu vereinfachen..^^

MfG

Antwort
ahmedhos

ahmedhos aktiv_icon

20:05 Uhr, 01.04.2010

Antworten
Ja, wenn du um z-Achse und x-Achse drehen möchtest, aber nenne die beiden Drehwinkel nicht α.
Du kannst die Drehung um die x-Achse mit αx bezeichnen und die Drehung um die z-Achse mit αz.

Wenn du die beiden α nennst und α zwischen 0 und 360° laufen läßt, dann dreht sich die Ellipse um den selben Winkel sowohl um die x-Achse als auch um die z-Achse.
Fragerich

Fragerich aktiv_icon

20:46 Uhr, 01.04.2010

Antworten
Ja, das habe ich zum Glück auch noch bemerkt und habe es geändert.

So sieht meine derzeitige Implementierung aus:

a=r
b=r
cosT=acos(t)
sinT=bsin(t)
cosBeta = cos(xyAngle)
sinBeta = sin(xyAngle)
cosAlpha = cos(zAngle)
sinAlpha = sin(zAngle)

x= mx + (cosBeta cosT- sinBeta sinT)
y= my + (cosAlpha sinBeta cosT+ cosAlpha cosBeta sinT)
z= mz + (-cosBeta sinAlpha cosT+ sinAlpha sinBeta sinT)

Aber leider habe ich folgendes Bild:

Verändern von xyAngle bringt nichts. Der (von Z aus gesehen) niedrigste Punkt ist immer nach Osten gerichtet. Verändern von zAngle modifiziert die Ellipse vom perfekten Kreis bis zum Strich. Im Grunde genau wie bei mir vorher nur mit 45° Neigung zur z-Achse.

Sehr ihr einen Fehler?

MfG
Diese Frage wurde automatisch geschlossen, da der Fragesteller kein Interesse mehr an der Frage gezeigt hat.