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

Wie Kanten eines Körpers als Event festlegen?

 

VergoX

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2017, 16:45     Titel: Wie Kanten eines Körpers als Event festlegen?
  Antworten mit Zitat      
Hallo zusammen,

ich arbeite gerade an einer Aufgabe, bei der ich den Zusammenstoß zweier 2D-Körper simulieren soll.
Jetzt stellt sich mir die Frage, wie ich den Zusammenstoß umsetzen kann. Der Würfel befindet sich auf einer quadratischen Fläche und stößt bereits an den Rändern ab, jedoch stehe ich jetzt vor dem Problem einen zweiten Körper (Kreis, 2. Wüfel, Dreieck, etc.) zu implementieren, welcher nun auch mit dem Würfel zusammenstoßen soll.

Kann ich hierfür die Event Funktion nutzen um so festzustellen, ob ein Punkt innerhalb der Fläche des einen Körpers, einen Punkt der Fläche des anderen Körpers berührt?
Bislang verwende ich nur die Eckpunkte des Würfels um zu prüfen, ob der Körper den Rahmen berührt. Bei einem Zusammenprall mit einem anderen Körper kann es ja vorkommen, dass die Ecke des zweiten Körpers auf einen Punkt auf einer Kante des Würfels auftrifft.

Bin noch nicht so vertraut mit MATLAB und auf Mathworks konnte ich leider keine Antwort finden.


Grüße
Mike


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.08.2017, 19:35     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht solltest du noch sagen, wie du das ganze angehen möchtest.
DGLen in MATLAB, oder Simulink, oder Simscape?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
VergoX

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2017, 22:36     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort.

Sorry, ja, in MATLAB mit Differentialgleichungen und ode45.

Dass der Würfel an den Rändern meines Rahmens abprallt konnte ich mit der Event Funktion umsetzen.
Hierfür hab ich als value die Eckpunkte des Würfels berechnet und die halbe Seitenlänge meines Rahmens addiert oder subtrahiert. Isterminal ist überall auf 1 und die direction ist auch klar gewesen.

Nur wenn ich jetzt einen zweiten Würfel, oder eine andere Form implementieren will, weiß ich nicht genau wie ich feststellen kann wann beispielsweise eine Ecke des einen Körpers eine Kante des anderen Körpers trifft.
Müsste ich hierfür als Event eine Funktion verwenden, die immer zwei Eckpunkte verbindet?

[EDITED, Jan, Bitte kein Quoting der gesamten vorhergehenden Nachricht - Danke!]
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.08.2017, 04:20     Titel:
  Antworten mit Zitat      
Hallo VergoX,

Du benötigst eine Funktion, die den Abstand zwischen einem Punkt und einer Strecke bestimmt. Vielleicht hilft das weiter:
Code:
function Dist = DistPointLine(P1, P2, Q)
% Is point Q=[x3,y3] on line through P1=[x1,y1] and P2=[x2,y2]

% Normal along the line:
P12 = P2 - P1;
L12 = sqrt(P12 * P12');
N   = P12 / L12;

% Line from P1 to Q:
PQ = Q - P1;

% Norm of distance vector: LPQ = N x PQ
Dist = abs(N(1) * PQ(2) - N(2) * PQ(1));

% Projection of the vector from P1 to Q on the line:
L = PQ * N.';  % DOT product
if L < 0.0 || L > L12
  Dist = Inf;
end
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
VergoX

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2017, 22:59     Titel:
  Antworten mit Zitat      
Vielen Dank Jan!
Bist der Beste Laughing
 
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 - 2025 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.