You are not logged in.

  • Login

SRS_Speci

Professional

  • "SRS_Speci" started this thread

Posts: 916

Occupation: GER

  • Send private message

1

Monday, May 1st 2006, 11:38am

Matheproblem: Schnittwinkel von Geraden mit Ellipsen

Moin,

ich weiß es ist noch früh am morgen, aber ich hab hier ein Problem an dem ich derzeit sitze und für das mir keine Lösung einfällt.

Es geht darum ein Programm zu schreiben dass gerade Linien durch eine Ellipse zeichnet die jeweils am Rand der Ellipse reflektiert werden. Programmietechnisch überlege ich noch in welcher Sprache ich das lösen will, aber derzeit steht erstmal noch ein Mathematisches Problem vor der Tür:

Wie kann ich den Winkel zwischen Lot auf dem Schnittpunkt und der Gerade bestimmen, so dass es möglich ist sauber zu reflektieren...
Mit leerem Kopf fällt Nicken leichter


2

Monday, May 1st 2006, 12:00pm

ging das nich mit Lotfußpunktverfahren?

SRS_Speci

Professional

  • "SRS_Speci" started this thread

Posts: 916

Occupation: GER

  • Send private message

3

Monday, May 1st 2006, 12:31pm

da muss ich zugeben dass mir das nichts sagt ;)
hm, an und für sich ist das ne schöne aufgabe, wenn nicht der blöde Ärger mit so ein paar mathematischen Details wäre.. das Lot habe ich jetzt...

Die Frage ist nur ob ich das ganze als Funktion von x oder Funktion von (x,y) ansehe.. Beides hat vor und Nachteile, bei Vektoren wäre es leichter die Winkel zu bestimmen, allerdings machen mir dann die Plots mehr Probleme glaube ich...

4

Monday, May 1st 2006, 12:35pm

hätte jetzt versucht:

ellipse parametriesieren
x(phi) = ( a cos(phi) , b sin (phi) )

schnittpunkt ellipse-gerade ermitteln

tangente in dem schnittpunkt aufstellen
dh. allgemeine geradengleichung im schnittpunkt ansetzen, mit bedingung dass sich gerade und ellipse nur in einem punkt schneiden.

winkel zwischen gerade und tangente mit hilfe von skalarprodukt einfach ausrechnen.

5

Monday, May 1st 2006, 2:40pm

Habs nur kurz mit Maple gemacht, schaut noch ziemlich hässlich aus... leider nicht mehr Zeit gehabt (hoffe Du blickst durch).

p[0]: Startpunkt
g[0]: Startrichtung
n: Rekursionen

Hab die Variablen jetzt in jedem Schritt neu deklariert, falls Du dir die Kurve rauslassen willst.
Im Prinzip spiegelt man in jedem Schritt den Richtungsvektor der Gerade entlang dem Normalenvektor der Ellipse und berechnet daraus die neue Gerade.

restart;
> with(plots):
> a:=1;b:=2;n:=20;
> p[0]:=[1/sqrt(2)*a,1/sqrt(2)*b];
> g[0]:=[1,2];
> P:={plot([a*cos(s),b*sin(s),s=0..2*Pi],scaling=constrained)}:
>
> for k from 1 to n do

#Schnittpunkt Gerade Ellipse bestimmen

> t[k-1]:=solve({(p[k-1][1]+t*g[k-1][1])^2/a^2+
> (p[k-1][2]+t*g[k-1][2])^2/b^2=1,t<>0},{t});
> t[k-1]:=subs(t[k-1],t);
> p[k]:=[p[k-1][1]+t[k-1]*g[k-1][1],p[k-1][2]+t[k-1]*g[k-1][2]];

#s[k-1] so bestimmen, dass die Parametrisierungskurve in s[k-1] durch
den Schnittpunkt läuft (braucht man für den Normalenvektor der
Ellipse)

> s[k-1]:=solve({a*cos(s)=p[k][1],b*sin(s)=p[k][2]},s);
> s[k-1]:=subs(s[k-1],s);

#Spiegeln der Gerade entlang dem Normalenvektor n der Ellipse im
Schnittpunkt (nach g[k] = g[k-1] - 2*<g[k-1],n>/<n,n>*n)

> sp:= 1/((b*cos(s[k-1]))^2+(a*sin(s[k-1]))^2)*
> (-b*cos(s[k-1])*g[k-1][1]-a*sin(s[k-1])*g[k-1][2]);
> g[k]:=[g[k-1][1]+2*sp*(b*cos(s[k-1])),g[k-1][2]+2*sp*(a*sin(s[k-1]))];

#Plot

> P:=op(P);
> Q:=plot([p[k-1][1]+s*g[k-1][1],p[k-1][2]+s*g[k-1][2],s=0..t[k-1]],scaling=constrained);
> P:={P,Q};
> end:
>
> display(P);
>

This post has been edited 8 times, last edit by "para" (May 1st 2006, 3:03pm)