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

Berechnung des maximalen Abstandes

 

leni

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2021, 11:22     Titel: Berechnung des maximalen Abstandes
  Antworten mit Zitat      
Hallo liebe Mitglieder,

ich würde gerne den maximalen Abstand eines Objektes zu einem Rechteck bestimmen. Anbei der Code:

Code:
% 1. Rechteck
R1X=[2 6 6 2 2];
R1Y=[6.5 6.5 2.5 2.5 6.5];
% 2. Rechteck
R2X=[6 10 10 6 6];
R2Y=[6.5 6.5 2.5 2.5 6.5];
% Objekt
OX=[5.1 5.2 5.4 6.5 6.7 6.8 6.7 6.5 5.4 5.2 5.1 5.1 6.8];
OY=[2.7 2.9 3.4 3.4 2.9 2.7 2.5 2 2 2.5 2.7 2.7 2.7];
% Plotten
figure(10)
plot(R2X,R2Y,'k');
hold on;
plot(R1X,R1Y,'r');
plot(OX,OY,'m','LineWidth',2);
axis([0 12 0 8]);
% Berechnung der Schnittpunkte (es ist nur der grüne in der Mitte gesucht)
[x,y]=polyxpoly(R1X,R1Y,OX,OY);
plot(x,y,'g*');
% Berechnung des maximalen Abstandes des rosanen Objektes zu dem
% Schnittpunkt in der Mitte in dem roten Rechteck
Abstaende=[];
for i=1:1:length(OX)
    for r=1:1:length(R1X)
        p2=[OX(1,i) OY(1,i)];
        p1=[R1X(1,r) R1Y(1,r)];
        abstand_i=norm(p2-p1);
        Abstaende=[Abstaende;abstand_i];
    end
end


Was mir wichtig ist, dass ich den maximalen Abstand des Teils des rosanen Objektes erhalte, welches in dem roten Rechteck enthalten ist, zu dem Schnittpunkt in der Mitte.
(Ich glaube als Ergebnis sollte der maximale Abstand zwischen den Punkten (5.1/2.7) und (6/2.7) (X/Y) ausgegeben werden. Also diesen Abstand suche ich zumindest.)
Wie implementiere ich diesen Teil in meiner for-Schleife. Momentan werden alle Abstände des rosanen Objekts zu dem roten Rechteck bestimmt.

Wie würdet ihr den maximalen Abstand berechnen, wenn die Berechnung des Schnittpunktes keine Option wäre? Weil der Mittelpunkt könnte z.B. auch außerhalb des Rechteckes liegen (Diese Option wäre für mein tatsächliches Skript sogar besser).

Beste Grüße und vielen Dank!
Leni


Harald
Forum-Meister

Forum-Meister


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

für mich ist dies sehr schwer nachvollziehbar.
Der Abstand zweier Objekte ist generell die minimale Entfernung je zweier Punkte. Von einem maximalen Abstand zu sprechen wäre für mich nur sinnvoll, wenn sich die Objekte bewegen, sich der Abstand also verändert.

Zitat:
Was mir wichtig ist, dass ich den maximalen Abstand des Teils des rosanen Objektes erhalte, welches in dem roten Rechteck enthalten ist, zu dem Schnittpunkt in der Mitte.

Was charakterisiert denn den "Schnittpunkt in der Mitte"? Das ist ja eines der Paare aus den Variablen x und y, aber warum dieses eine und nicht ein anderes?
Wenn du die Entfernung zwischen Schnittpunkt(en) und Objektpunkten willst, dann solltest du auch damit arbeiten und nicht mit R1x und R1y.

Zitat:
Ich glaube als Ergebnis sollte der maximale Abstand zwischen den Punkten (5.1/2.7) und (6/2.7) (X/Y) ausgegeben werden.

Glaubst du oder bist du dir sicher? Warum (5.1/2.7) und nicht (5.4/3.4)?

Zitat:
Wie würdet ihr den maximalen Abstand berechnen, wenn die Berechnung des Schnittpunktes keine Option wäre?

Jetzt wird es für mich endgültig merkwürdig. Das würde ja heißen, man berechnet das Maximum von Werten, die man nicht kennt??

Zitat:
Weil der Mittelpunkt könnte z.B. auch außerhalb des Rechteckes liegen

Nun erwähnst du zum ersten Mal den Mittelpunkt. Was hat der Mittelpunkt denn mit allem anderen zu tun?

Es ist durchaus möglich, dass die Lösung des Problems trivial ist, nämlich die Verwendung des Befehls max . Dazu müsste aber überhaupt erst mal klar sein, was das Problem ist, und das ist mir alles andere als klar.

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
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2021, 09:37     Titel:
  Antworten mit Zitat      
Guten morgen Harald,

vielen Dank für deine Antwort. Mein Anliegen war alles andere als gut formuliert.

Zitat:
Was charakterisiert denn den "Schnittpunkt in der Mitte"? Das ist ja eines der Paare aus den Variablen x und y, aber warum dieses eine und nicht ein anderes?
Wenn du die Entfernung zwischen Schnittpunkt(en) und Objektpunkten willst, dann solltest du auch damit arbeiten und nicht mit R1x und R1y.


Das war mehr als verwirrend, ich würde für den weiteren Verlauf die Schnittpunkte außer acht lassen. Für die Aufgabenstellung sind diese erstmal nicht relevant.

Zitat:

Glaubst du oder bist du dir sicher? Warum (5.1/2.7) und nicht (5.4/3.4)?


Da hast du vollkommen recht. Was ich auch noch vergessen habe zu erwähnen ist, dass mich der maximale Abstand in der horizontalen interessiert. D.h. von der linken Seite des rosanen Objekts innerhalb des roten Rechtecks zu der rechten Seite des roten Rechtecks. Daher die von mir angesetzten (5.1/2.7).

Zitat:
Nun erwähnst du zum ersten Mal den Mittelpunkt. Was hat der Mittelpunkt denn mit allem anderen zu tun?


Ich kann sehr gut nachvollziehen das die Einführung des Mittelpunktes zu großer Verwirrung geführt hat. Auch dieser soll wie die Schnittpunkte außer acht gelassen werden.

Was für mich wichtig ist, dass ich weiß wie ich Matlab sage, dass nur die Fläche des rosanen Objekts innerhalb des roten Rechtecks bei der Abstandsberechnung berückscihtigt wird und wie ich den maximalen Abstand in der horizontalen bekomme.

Ich hoffe meon Problem ist nun verständlicher.

Beste Grüße und Vielen Dank
 
Harald
Forum-Meister

Forum-Meister


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

geht es immer um die rechte Kante des Rechtecks? Wenn nicht, musst du sagen nach welchen Kriterien das entschieden wird. Ich gehe mal von der rechten Kante aus: max(R1x)

Du benötigst also vom Objekt nur die minimale und maximale x-Ausdehnung min(OX) und max(OY) :

Code:
min( max(R1x)-min(OX), max(OY) - min(R1x) )


Falls es sein kann, dass sich das Objekt komplett innerhalb oder außerhalb des Rechtecks liegt, musst du dir überlegen, was du für diesen Fall möchtest.

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
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2021, 11:02     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort. Dein Code gibt mir den richtigen Abstand aus.

Zitat:
geht es immer um die rechte Kante des Rechtecks? Wenn nicht, musst du sagen nach welchen Kriterien das entschieden wird.


Geht es leider nicht. Das Objekt bewegt sich im Raum und in dem von mir dargestellten Beispiel bewegt es sich in Richtung x-Achse. Die rosane vertikale Linie zeigt sozusagen die Fahrtrichtung an (Mittellinie bzw. die maximale Länge des Objektes). In der Realität sind die Rechtecke auch gedreht, sprich sie liegen nicht wie in diesem Beispiel im 90 Grad Winkel vor. Bei den Objekten ist es analog.

Wieso ich das eigentlich mache ist, dass ich den letzten Zeitpunkt berechnen möchte wann das Objekt das Rechteck verlässt. Da ich aber nur eine Frequenz von xy Sekunden habe liegt das Objekt bei Zeitpunkt 1 noch innerhalb und bei Zeitpunkt 2 schon außerhalb des Rechtecks. Daher wollte ich den maximalen Abstand berechnen und durch die Geschwindigkeit des Objektes teilen, sodass ich den Zeitpunkt beim verlassen als Ergebnis ausgegeben bekomme.

Zitat:
Falls es sein kann, dass sich das Objekt komplett innerhalb oder außerhalb des Rechtecks liegt, musst du dir überlegen, was du für diesen Fall möchtest.


Außerhalb des Rechtecks können die Objekte nicht liegen, sie berühren stets das Rechteck, wenn auch nur minimal.

Könnte man vllt anhand der Mittellinie des Objektes definieren welche Seite betrachtet wird? In diesem Fall schneidet diese die rechte Seite des Rechtecks.
Und wenn die Objekte das Rechteck nur minimal schneiden und die Mittellinie außerhalb des zu untersuchenden Rechtecks liegt, könnte man die Mittellinie vielleicht auf den äußersten Punkt innerhalb des Rechtecks verschieben und dann den Schnittpunkt mit dem Raster ausrechnen und so die Distanz bestimmen?

Vllt hast du noch einen Tipp

Beste Grüße und Vielen Dank.
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
In der Realität sind die Rechtecke auch gedreht, sprich sie liegen nicht wie in diesem Beispiel im 90 Grad Winkel vor. Bei den Objekten ist es analog.

Dann würde ich beides so rotieren, dass die Rechtecke so liegen. Das erleichtert das Denken zumindest für mich deutlich.

Zitat:
Außerhalb des Rechtecks können die Objekte nicht liegen, sie berühren stets das Rechteck, wenn auch nur minimal.

Du schreibst doch aber davor, dass du wissen willst, wann das Objekt das Rechteck verlässt??

Zitat:
Könnte man vllt anhand der Mittellinie des Objektes definieren welche Seite betrachtet wird?

Einfacher dürfte folgendes sein:
min(OX) < rechteKanteX && max(OX) > rechteKanteX --> rechte Kante nehmen
min(OX) < linkeKanteX && max(OX) > linkeKanteX --> linke Kante nehmen
ansonsten gibt es keinen Schnittpunkt mit einer Kante.

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
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2021, 18:53     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Antwort.

Zitat:

Dann würde ich beides so rotieren, dass die Rechtecke so liegen. Das erleichtert das Denken zumindest für mich deutlich.


Ich führe diese Vorgehensweise für eine Vielzahl von Rechtecken und Objekten durch. Dann würde ein drehen der Objekte zu viel Aufwand sein bzw die eigentlichen Gegebenheiten verfälschen?


Zitat:
Du schreibst doch aber davor, dass du wissen willst, wann das Objekt das Rechteck verlässt??.


Ja, dass stimmt. Aber es ist auch möglich, das manche Objekte ein Rechteck auch nur minimal berühren bzw. durchlaufen, wodurch sich dann eine geringe Distanz ergeben würde.

Zitat:
Einfacher dürfte folgendes sein:
min(OX) < rechteKanteX && max(OX) > rechteKanteX --> rechte Kante nehmen
min(OX) < linkeKanteX && max(OX) > linkeKanteX --> linke Kante nehmen
ansonsten gibt es keinen Schnittpunkt mit einer Kante


Es ist auch so, dass die Objekte das Rechteck oben und unten schneiden können, d.h. das nicht nur die linke und rechte Kante sondern auch die obere und untere berücksichtigt werden müssen.

Ich hoffe ich konnte mein Anliegen ausführlicher darlegen. Und du hast vllt auch hierzu noch einen Hinweis oder Tipp?

Beste Grüße und vielen Dank
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Dann würde ein drehen der Objekte zu viel Aufwand sein bzw die eigentlichen Gegebenheiten verfälschen?

Den Aufwand würde ich als minimal ansehen. Du kannst den Drehwinkel ja automatisch aus den Koordinaten des Rechtecks ermitteln.

Zitat:
d.h. das nicht nur die linke und rechte Kante sondern auch die obere und untere berücksichtigt werden müssen.

Dann entweder so drehen, dass obere und untere zu linker bzw. rechter Kante werden oder den Code entsprechend erweitern.

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
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2021, 12:59     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine zahlreichen und hilfreichen Vorschläge.

Mein Skript läuf tnun einwandfrei.

Beste Grüße
 
Harald
Forum-Meister

Forum-Meister


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

wenn möglich, bitte auch immer die Lösung mit dazu schreiben, falls mal jemand anders vor ähnlichen Problemen steht und auf diesen Thread stößt.

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.