WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rotieren einer Parabel

 

ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.02.2012, 09:13     Titel: Rotieren einer Parabel
  Antworten mit Zitat      
Hallo!

Ich habe eine Parabel mit der folgenden Funktion:

Code:
x = -y.^2/(4*f) + f ;


welche zum Beispiel mit

Code:
y = linspace(-5,5,100)
f = 1 ;
plot(x,y);


grafisch dargestellt werden kann.

Nun moechte ich aber die Parabel so definieren, dass ihre eigene Achse rotiert werden kann, bzw dass ich einen Winkel a definieren kann, in Funktion dessen die Symmetrieachse der Parabel um den Ursprung einer x,y Referenz rotiert werden kann.

Man kann Referenzsysteme mit folgenden Gleichungen rotieren:

Code:
x2 = x*cos(a) - y*sin(a);
y2 = x*sin(a) + y*cos(a);


Ich habe versucht die Parabel in Funktion dieser beiden Gleichungen auszudruecken und dann mit der Funktion 'solve' die dadurch entstehende Gleichung in Funktion von x auszudruecken, aber ich habe dann, nachdem ich versucht habe die Parabel grafisch darzustellen, kein Ergebnis erreicht. Die Parabel rotiert nicht einfach um ihre eigene Achse, zudem erhalte ich zwei Loesungen (da ja nach y62 aufgeloest werden muss) und ich weiss nicht wie ich wieder zu einer enstprechenden Formulierung einer einzigen Parabel mit einer um a Grad geneigten Symmetrieachse gelange.

Eure Hilfe waere mir sehr herzlich willkommen.

Christian


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2012, 11:11     Titel:
  Antworten mit Zitat      
Code:

t = linspace(-5,5,1000);

y = t;
f = 1;
x = -y.^2/(4*f) + f ;

plot(x,y); hold on;

a = pi/2;

x2 = x*cos(a) - y*sin(a);
y2 = x*sin(a) + y*cos(a);

plot(x2,y2,'r');
 



Du musst zuerst eine Kurve k = [x(t),y(t)] definieren und dann die Punkte der Kurve um den entsprechenden Winkel drehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2012, 08:40     Titel:
  Antworten mit Zitat      
So ist es! Very Happy
Frage beantwortet.

Herzlichen Dank, super!
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 16:29     Titel:
  Antworten mit Zitat      
Jetzt habe ich eine zweite Frage zum selbigen Thema:

Gehen wir davon aus ich moechte in einem gewissen Punkt der rotierten Parabel die Tangente ermitteln.
Das ist im Falle einer Parabel ja mathematisch gesehen das Differenzial der Funktion, im Punkt der Tangente berechnet, welche mir die neigung der Gerade gibt.

Wie muss ich mich nun verhalten wenn die Parabel rotiert ist?

Ich gebe vor. Im Falle einer Rotation = 0 habe ich folgenden Code:

Code:

f = 2;
y = linspace(-5,5,1000);
x = -y.^2/(4*f) + f;

y0 = -0.5;
x0 = -y0.^2/(4*f) + f;
A = [x0,y0]; % Punkt auf der Parabel in dem ich die Tangente ermitteln moechte

m_tan = f/sqrt(f*(f+x0)); % Differenzial der Funktion in A
n_tan = y0 - m_tan*x0;

y_tan = m_tan.*xaxis + n_tan; % Tangente
 


Jetzt moechte ich die Parabel rotieren und selbiges berechnen.
Problem: ich befinde mich in einem neuen Koordinatensystem und kann nicht so ohne weiteres zurueck, da ja die Funktion nicht explizit in Matlab als rotierte Parabel ausdrueckbar ist.

Kann mir da bitte jemand helfen? Herzlichen Dank.
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2012, 10:27     Titel:
  Antworten mit Zitat      
Ich habe eine moegliche Loesung!
Ich berechne die generische Parabel:

0 = a*x^2 + b*y^2 + 2*h*x*y + 2*g*x + 2*f*y + c;

indem ich erst die Parabel rotiere, danach 5 (x,y) Punkte aus ihr auslese und obige Gleichung in die SOLVE Funktion stecke, welche ich fuer alle 5 Punkte berechne und somit die 5 Variablen
a, b, g, f, c
ermittle.

h kenne ich bereits, denn h = sqr(a*b);

Ich habe folgendes System erstellt.
Gehen wir davon aus, dass die Parabel bereits rotiert wurde, und ihre Punkte von den Vektoren x3 und y3 beschrieben werden.

Code:

step = 50;
idp = find(x3 == max(x3)); % findet die Position eines Extremum der Parabel (in x)
delta = (round(length(x3)/step));
px1 = x3(idp - 2*delta);
px2 = x3(idp - delta);
px3 = x3(idp);
px4 = x3(idp + delta);
px5 = x3(idp + 2*delta);
py1 = y3(idp - 2*delta);
py2 = y3(idp - delta);
py3 = y3(idp);
py4 = y3(idp + delta);
py5 = y3(idp + 2*delta);
% jetzt fuettere ich mit diesen Punkten die Parabelgleichung um alle unbekannten werte zu ermitteln
syms a b g f c
S = solve(a*px1^2 + 2*sqrt(a*b)*px1*py1 + b*py1^2 + 2*g*px1 + 2*f*py1 + c = 0,...
a*px2^2 + 2*sqrt(a*b)*px2*py2 + b*py2^2 + 2*g*px2 + 2*f*py2 + c = 0,...
a*px3^2 + 2*sqrt(a*b)*px3*py3 + b*py3^2 + 2*g*px3 + 2*f*py3 + c = 0,...
a*px4^2 + 2*sqrt(a*b)*px4*py4 + b*py4^2 + 2*g*px4 + 2*f*py4 + c = 0,...
a*px5^2 + 2*sqrt(a*b)*px5*py5 + b*py5^2 + 2*g*px5 + 2*f*py5 + c = 0,'' a','b','g','f','c');
S = [S.a S.b S.g S.f S.c];
 


Matlab laeuft aber mit diesen Commands in einen (scheint mir) endlosen Loop. Ich schaffs nicht das System numerisch zu loesen! Sad
Habt ihr eine Ahnung was ich falsch mache?

Ich muss praktisch die Reflexionen eines Strahls auf zwei konfokalen Parabeln berechnen, von denen eine in einem normalen, eine zweite in einem geneigten Koordinatensystem vorgegeben ist. (Also die zweite Parabel ist konfokal, aber nicht koaxial).

Danke[/code]
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 06.03.2012, 13:38     Titel:
  Antworten mit Zitat      
Ich hab zwar keine Ahnung, geb trotzdem mal meinen Senf dazu Wink
1.) du hast doch schon mal irgendwie die Parabeln berechnet, oder? MUSST du dann nochmal nach den Geichungen suchen? Resp.: ergibt sich nicht durch Rotation schon deine Kurve und könnte man ggf. "einfach" den Strahl um die z-Achse rotieren, bis er bei z=0 gelandet ist?
2.) Kann man deinen solve-Ausdruck auch vektoriell darstellen? Ich hab mal gelesen (Wink), dass Matlab dann schneller ist. Also px=[px1 px2...]
und dann
Code:
S = solve(a*px.^2 + 2*sqrt(a*b)*px.*py + b*py.^2 + 2*g*px + 2*f*py + c = 0

3.) Da du das Ding nicht numerisch lösen kannst: Ist es lösbar?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
ChristianS

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.03.2012, 18:41     Titel:
  Antworten mit Zitat      
Hallo und herzlichen Dank erstmal.
Was ich erstellen muss ist ein kleines "Ray Tracing" Programm.

Ich habe ein kleines Bild angehaengt um zu verstehen, auch wenns sehr schlimm ausschaut (sorry) Smile

Ein Strahl geht von A aus, trifft die rotierte Parabel, nach Snellschem Gesetz wird er reflektiert: also berechne ich in dem Punkt Tangente, Normale und den Winkel zwischen dem Strahl und der Normale - das ergibt dann weiterhin einen gleichen Winkel mit dem dieser abgestrahlt in Richtung der grossen (nicht rotierten Parabel) wird. Und dort das gleiche nochmal.

Daher muesste ich nun Tangente und Normale auf der rotierten Parabel berechnen.

geht das?

a.jpg
 Beschreibung:

Download
 Dateiname:  a.jpg
 Dateigröße:  27.17 KB
 Heruntergeladen:  940 mal
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 19.03.2012, 09:12     Titel:
  Antworten mit Zitat      
gehen tut das schon irgendwie...
Soll x' die rotierte x-Achse sein?
Sind das zwei Parabeln? Sollen die um x und x' rotieren um Spiegel zu ergeben? Wo soll A liegen? immer auf der x-Achse? Wohin strahlt dein Strahl? Immer woanders hin? (-> Reduktion von Ausgangszuständen)
Dann dasselbe für B.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2012, 14:17     Titel:
  Antworten mit Zitat      
Hallo,
ja, A immer im selben Punkt und nur die zweite Parabel rotiert zusammen mit der x' Achse.
Beides sind Parabeln, die linke (um x) aendert sich aber nicht.

Danke!
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 11.04.2012, 13:32     Titel:
  Antworten mit Zitat      
und?
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.