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

Computerprogramm schreiben - Hilfe!!

 

st070901
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2022, 00:12     Titel: Computerprogramm schreiben - Hilfe!!
  Antworten mit Zitat      
Hallo liebe Community!

Ich hätte folgende Aufgabe in Matlab zu lösen und bräuchte dringend eure Hilfe:

Der Mittelpunkt einer Kugel S mit Radius r > 0 bewegt sich entlang des Strahls mit Ausgangspunkt A (aus dem R^3) und Richtungsvektor v (ungleich 0). Zwei weitere Punkte P, Q ∈ R^3 definieren eine Strecke im dreidimensionalen Raum. Schreiben sie ein Computerprogramm, das entscheidet, ob die bewegliche Kugel entlang ihrer Laufbahn die Strecke trifft oder nicht.

Nun habe ich folgenden mathematischen Ansatz gewählt:

1) Zuerst eine Gleichung der Geraden im R^3 aufstellen: X= P + t*PQ

2) Aufstellen der Normalebene E zur Geraden g durch den Mittelpunkt M, wobei der Richtungsvektor meiner Geraden ja mein Normalvektor ist und ich E somit direkt in Normalform schreiben kann.

3) Ermittlung des Schnittpunktes von g mit E, idem g in E eingesetzt wird und danach nach t umgeformt. Anschließend erhält man den Schnittpunkt durch Einsetzen von t in g.

4) Überprüfen, ob der Schnittpunkt S von A ausgehend in Richtung v liegt oder in Richtung -v (in Richtung v liegt er wenn t >= 0 gilt)

5) Berechnen ob der Abstand zwischen dem Mittelpunkt M und dem Schnittpunkt S kleiner gleich oder größer dem Radius r ist.

So weit hätte ich meinen mathematischen Ansatz gewählt. Meine Frage lautet nun: Stimmt dieser?

Und anschließend würde ich auf alle Fälle großzügige Hilfe beim Schreiben eines Programmes in Matlab brauchen, da ich dabei nicht sehr erfahren bin und ich mich nicht gut auskenne:

Ich hätte mir überlegt meinen einzelnen Punkt und Vektoren als Vektoren in Matlab zu definieren. Anschließend die Gerade und Ebene zu definieren, diese zu schneiden, den SP zu berechnen. Und dann mit "If" als erste Alternative, wenn t >=0, dann mach weiter und wenn t<0, dann funktionierts ja nicht und weiterführend mit if, wenn der Abstand eben kleiner gleich dem Radius ist trifft die Kugel die Gerade und wenn der Abstand größer ist eben nicht. Hierbei bräuchte ich Hilfe bei der Umsetzung in Matlab.

Bis jetzt habe ich folgendes probiert:

Code:


% Veränderbare Werte
P = [p_x, p_y, p_z]; % Punkt P im R^3
Q = [q_x, q_y, q_z]; % Punkt Q im R^3

A = [a_x, a_y, a_z]; % Punkt A im R^3 - Ausgangspunkt des Strahls
v = [v_x, v_y, v_z]; % Richtungsvektor v
M = [m_x, m_y, m_z]; % Mittelpunkt M der Kugel S
r = 5; % Radius der Kugel S

% Formeln
syms x y z; % symbolische Variablen
g: X = P + t*(Q-P); % Gleichung der Gerade, welche durch P und Q geht
k = (q_x-p_x)*m_x + (q_y-p_y)*m_y + (q_z-p_z)*m_z;
E: (q_x-p_x)*x + (q_y-p_y)*y + (q_z-p_z)*z = k; % Gleichung der Normalebene zu g

 


Allerdings habe ich bereits bei meiner Definition von P folgende Fehlermeldung erhalten: Incorrect use of '=' operator. Assign a value to a variable using '=' and compare values for equality
using '=='.

Kann mir nun jemand helfen, was ich bis jetzt falsch gemacht habe und wie ich nun am besten weiter vorgehen könnte.

Danke im Voraus,
LG
Private Nachricht senden Benutzer-Profile anzeigen


st070901
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.11.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2022, 10:07     Titel:
  Antworten mit Zitat      
Folgendermaßen hätte ich es nun versucht zu lösen:

Code:


% Projekt SM LAAG
% Aufgabe 4
close all, clear  clc

% Veränderbare Werte
p_x = 4;
p_y = -10;
p_z = 5;
q_x = 7;
q_y = -3;
q_z = 13;
a_x = 5;
a_y = 4;
a_z = 3;
v_x = 3;
v_y = 6;
v_z = 5;
m_x = 5;
m_y = -3;
m_z = 3;


r = 5; % Radius der Kugel S

% Definition der Punkte und Vektoren
P = [p_x, p_y, p_z]; % Punkt P im R^3
Q = [q_x, q_y, q_z]; % Punkt Q im R^3

A = [a_x, a_y, a_z]; % Punkt A im R^3 - Ausgangspunkt des Strahls
v = [v_x, v_y, v_z]; % Richtungsvektor v
M = [m_x, m_y, m_z]; % Mittelpunkt M der Kugel S  

% Formeln
syms x y z t; % symbolische Variablen
g = P + t*(Q-P); % Gleichung der Gerade, welche durch P und Q geht
k = (q_x-p_x)*m_x + (q_y-p_y)*m_y + (q_z-p_z)*m_z;
E = (q_x-p_x)*x + (q_y-p_y)*y + (q_z-p_z)*z + k; % Gleichung der Normalebene zu g
t= (k-(p_x*q_x-p_x^2 + p_y*q_y-p_y^2 + p_z*q_z-p_z^2))/((q_x-p_x)^2 + (q_y-p_y)^2 + (q_z-p_z)^2);
D = P + t*(Q-P); % Berechnung des Durchstoßpunktes von g mit E

% Berechnung des Abstandes von M zu D
d_x = D(1,1);
d_y = D(1,2);
d_z = D(1,3);

ABSTAND = ((d_x-m_x)^2 + (d_y-m_y)^2 + (d_z-m_z)^2)^(1/2); % Abstandsformel

% Trifft die Kugel S die Strecke/Gerade g?

if t < 0
    s = 'D liegt nicht in Richtung v';
elseif ABSTAND <= r
    s = 'Kugel S trifft die Strecke!';
else
    s = 'Kugel S trifft die Strecke nicht!';
end

save("Projekt_SM_LAAG.mat")

 


Ich würde um Kommentare, Verbesserungsvorschläge bitten! Ich hab jetzt mal beliebige Werte hineingeschrieben, die man jederzeit verändern kann.

Mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.06.2022, 10:13     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Allerdings habe ich bereits bei meiner Definition von P folgende Fehlermeldung erhalten: Incorrect use of '=' operator. Assign a value to a variable using '=' and compare values for equality
using '=='.

Das ist merkwürdig, da in der Zeile kein Syntaxfehler enthalten ist. Kopiere das doch nochmal in ein leeres Editor-Fenster.
Das "g:" und "E:" in den drei letzten Zeilen sind dagegen keine gültige Syntax.

Zudem wirst du konkrete Werte für p_x, p_y, p_z, q_x, q_y, q_z etc. vorgeben müssen, um dein Programm laufen zu lassen.

Es wäre nachvollziehbarer, was du wo machen willst, wenn du die Vorgehensweise oben als Kommentare in deinen Code reinschreibst.

Wie du eine if-Abfrage schreibst, siehst du in der Doku bzw. im MATLAB Onramp.

Ich persönlich würde den Abstand zwischen der Gerade PQ und dem Strahl berechnen. Sollte der Punkt auf PQ, in dem der Abstand minimal wird, außerhalb der Strecke liegen oder t < 0 sein, dann würde ich mit den nächstgelegenen Endpunkten von PQ bzw. dem Strahl weiterarbeiten.

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
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.06.2022, 10:29     Titel:
  Antworten mit Zitat      
Hallo,

das gute ist: das Programm läuft soweit.
Weniger gut: du definierst in A, v, M, g und E etliche Variablen, die du später nicht verwendest. a_x, a_y, a_z werden nicht verwendet, aber A ist wohl ohnehin von der Bedeutung her das gleiche wie M und somit überflüssig?
Und worüber ich mir wirklich Gedanken machen würde: in deinen Berechnungen kommen weder v noch v_x, v_y und v_z vor...

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.