Sie sind nicht angemeldet.

  • Anmelden

1

01.05.2006, 11:38

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

01.05.2006, 12:00

ging das nich mit Lotfußpunktverfahren?

3

01.05.2006, 12:31

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

01.05.2006, 12:35

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

01.05.2006, 14:40

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);
>

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »para« (01.05.2006, 15:03)