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

Analytische Geometrie - Reflexion von Gerade auf Ebene

 

Sindbad_der_Seefahrer
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 17.03.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.06.2023, 20:55     Titel: Analytische Geometrie - Reflexion von Gerade auf Ebene
  Antworten mit Zitat      
Hallo allerseits,

leider ist es mir nicht vergönnt, Matlab umfangreich zu beherrschen. Trotzdem bin ich gewillt, dass Programm für mein vorliegendes Problem anwenden zu wollen - allerdings benötige ich Eure Hilfe dazu.

Ich möchte mit Hilfe der analytischen Geometrie untersuchen, wie Lichtstrahlen auf einer Ebene reflektiert werden. Bevor ich aber soweit bin, habe ich erst noch grundsätzliche Fragen und hoffe, dass Ihr mir weiterhelfen könnt und wollt.

Zuerst möchte ich überhaupt eine Ebene in Matlab definieren und diese als Plot darstellen.

Hierzu habe ich folgenden Code mir aus dem Internet zusammengebastelt:

Code:

P1 = [10,0,0];
P2 = [0,10,0];
P3 = [10,0,10];

normal = cross(P1-P2, P1-P3);

syms x y z;
P = [x,y,z];
planefunction = dot(normal, P-P1);
zplane = solve(planefunction, z);

fmesh(zplane, [0 20 0 20]);

 


Zu (meiner) Erklärung:
Mit P1 bis P3 definiere ich die drei Punkte meiner Ebene. Anschließend bilde ich das Kreuzprodukt für den Normalenvektor, soweit noch klar.
was es genau mit dem Befehl
Code:
auf sich hat, ist mir noch nicht klar, aber vermutlich ist das die Definition der drei Variablen für meine Ebene?

Den Rest verstehe ich leider weder noch wieß ich überhaupt ob es richtig ist. Zumindest zeigt der Plot nicht das was ich mir erhofft habe.

Ich würde mich sehr über Hilfe von euch freuen, danke!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.427
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.06.2023, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

wenn du herausfinden möchtest, was es mit einem Befehl auf sich hat, kannst du immer die Dokumentation lesen, z.B.
Code:


Das Problem ist in deinem Fall ein mathematisches: Du hast eine Ebene, die senkrecht auf der x-y-Ebene steht, da P1 und P3 genau übereinander liegen. In dem Fall ist es nicht sinnvoll, nach z aufzulösen. Alternativen für den Fall siehe z.B. hier
https://de.mathworks.com/matlabcent.....perpendicular-to-xy-plane

Folgendes würde funktionieren:
Code:
xplane = solve(planefunction, x);
f = matlabFunction(xplane);
[Y,Z] = meshgrid(0:20,0:20);
 X = f(Y);
 surf(X,Y,Z)


Wenn das hier nur ein Beispiel war und im "echten" Problem die Ebene nicht senkrecht auf der x-y - Ebene steht, solltest du deinen Code direkt verwenden können.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sindbad_der_Seefahrer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 17.03.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2023, 23:05     Titel:
  Antworten mit Zitat      
Hallo und danke für die Antwort.

Ich bin nun auch schon etwas weiter mit meiner Problemstellung und habe mittlerweile folgenden Code entwickelt.

Code:

clear;
%PV Anlage
PV1 = [1,1,1];
PV2 = [0,1000,0];
PV3 = [-1459,0,-680];

%Sonnenstand
PS4 = [0,-1000,2144];

%Hauswand
PH5 = [-5000,4500,0];
PH6 = [-5000,4500,3000];
PH7 = [-10000,4501,3000];

%Erzeugen der PV Ebene
normal_PV = cross(PV1-PV2, PV1-PV3);            %Normalenvektor
n_PV = normal_PV/norm(normal_PV);               %Normierter Normalenvektor

syms x y z;                                     %Einführen symbolischer Ebenenvariablen
P = [x,y,z];                                    %Beliebiger Punkt auf der PV Ebene
funct_PV = dot(normal_PV, P-PV1);               %Skalarprodukt
plane_PV = solve(funct_PV, z);

%Erzeugen der Hausebene
normal_HW = cross(PH5-PH6, PH5-PH7);            %Normalenvektor
n_HW = normal_HW/norm(normal_HW);               %Normierter Normalenvektor

funct_HW = dot(normal_HW, P-PH5);                %Skalarprodukt
plane_HW = solve(funct_HW, z);


%Erzeugen des Sonnenstrahls
syms t;                                         %Einführen symbolischer Geradenvariablen
line_S = PS4 + t*(PV1-PS4);                     %Definition der Geradenfunktion Sonnenstrahl
newfunct_PV = subs(funct_PV, P, line_S);
t0 = solve(newfunct_PV);
point = subs(line_S, t, t0);
subs(funct_PV, P, point);

alpha_r=asin(dot(normal_PV,(PV1-PS4))/(norm(normal_PV)*norm(PV1-PS4)));
alpha_d=alpha_r*180/pi();

%Erzeugen der Reflexion
syms s;                                         %Einführen symbolischer Geradenvariablen
PS4_proj = PS4 - dot(PS4 - PV1, n_PV) * n_PV;
line_BL = PS4_proj + s*(PV1-PS4_proj);

plot3(PS4_proj(1),PS4_proj(2),PS4_proj(3),'or'), hold on;
ezplot3(line_S(1), line_S(2), line_S(3), [-1,3]), hold on;
ezplot3(line_BL(1), line_BL(2), line_BL(3), [-1,3]), hold on;
ezmesh(plane_PV, [-1495, 0, 0, 1000]), hold off;
%ezmesh(plane_HW, [-80, 80, -80, 80]), hold off;
axis([-2000, 1000, -1000, 1500, -1000, 1000]), title '';
 


Was ich nun nicht schaffe, ist die zweite Ebene (hier plane_HW) im Diagramm darzustellen. Ich habe diese über meinen vorletzten Befehl - der nun als Kommentar dargestellt ist - versucht einzubinden, aber dies führt zu Fehlern (ich habe in der Zeile davor den Schalter hold off natürlich auf hold on gesetzt.

Was muss ich tun, damit die zweite Ebene auch sichtbar wird?
Vielen Dank schon jetzt!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.427
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.06.2023, 22:39     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist letztlich immer noch das gleiche:
plane_HW ist leer, und das liegt wiederum daran, dass funct_HW keine z-Komponente enthält. Wie man generell Ebenen plotten kann, die senkrecht zur x-y-Ebene stehen und deren Gleichung somit kein z enthalten, habe ich dir ja schon geschrieben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sindbad_der_Seefahrer
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 17.03.23
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2023, 16:01     Titel:
  Antworten mit Zitat      
Vielen Dank, Harald.

Leider werde ich irgendwie nicht ganz schlau aus dem Plotten im Matlab.
Deine Befehle habe ich versucht bei mir anzuwenden. Leider - vielleicht habe ich es aber auch nicht verstanden - funktionieren diese ja nur dann, wenn die darzustellende Ebene tatsächlich senkrecht auf der X-Y-Ebene steht.
Nun will ich ja als finales Ergebnis einen allgemeinen Algorithmus haben, bei dem ein Lichtstrahl auf einer Ebene reflektiert wird und wiederum auf eine andere trifft. Die Lage der Ebenen kann senkrecht auf beispielsweise der X-Y-Ebene sein, muss es aber nicht.

Nun kann ich doch die Plot-Befehle nur schwerlich von der Lage der Ebene abhängig machen, oder bleibt mir hier nichts anderes übrig?

Danke für die Rückmeldung!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.427
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.06.2023, 20:55     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist nicht so sehr das Plotten, sondern das Auflösen nach einer Variablen: wenn die Ebenengleichung kein z enthält, kann auch nicht nach z aufgelöst werden, und dann gibt es auch nichts zu plotten.

Zitat:
Nun kann ich doch die Plot-Befehle nur schwerlich von der Lage der Ebene abhängig machen, oder bleibt mir hier nichts anderes übrig?

Du kannst nach einer Möglichkeit suchen, die Ebene zu plotten, ohne nach einer Variablen aufzulösen. Ich würde mich aber für die Fallunterscheidung entscheiden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.