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

schnittpunkt zwischen Geraden ermitteln

 

cornetto1234
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2009, 10:28     Titel: schnittpunkt zwischen Geraden ermitteln
  Antworten mit Zitat      
Hallo,

ich als absoluter Matlab Anfänger zwei Fragen:

1)Und zwar möchte ich von einer Geradengleichung und einem vorgegebenem Gebiet im Koordinatensystem den Schnittpunkt ermitteln und weiß nicht wie das gehen könnte. Ich schreibe unten mal auf, was ich bereits habe. Der erste Teil soll im Prinzip ein Gebiet beschreiben, in dem sich eine Kugel bewegen soll. Der zweite Teil beschreibt dann den Weg den die Kugel nimmt und ich möchte nun den ersten Schnittpunkt der Kugel(also der Gerade) mit dem Rand des Gebietes ermitteln. Wie könnte das gehen?

2) Gibt es eigentlich eine Möglichkeit das Gebiet in einen Ausdruck zu packen bzw. das irgendwie einfacher zu schreiben?

Code:
% Das ist mein Programm.
%Beschreibt das Gebiet, in dem sich die Kugel bewegt
t0=0:0.1:1;
x0=1.7*t0;
y0=2*t0+1;
plot(x0,y0);
hold on;
plot([1.7,1.7],[0,3]);
hold on;
plot([0,0],[0,1]);
hold on;
plot([0,1.7],[0,0]);
hold on;

%Beschreibt den ersten Weg der Kugel
t=0:0.1:10;
x=0.8*t+0.2;
y=0.5*t;
plot(x,y);
shg;
 


Vielen Dank schon mal und viele Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2009, 15:23     Titel:
  Antworten mit Zitat      
Hallo Cornetto,

einen Schnittpunkt von einem Gebiet mit einer Gerade gibt es nicht. Du meinst wahrscheinlich den Schnittpunkt der Gerade mit dem Rand des Gebietes. Der Rand besteht ja aus vier Teilstücken. Wahrscheinlich meinst Du nur den oberen und den rechten Rand. Dann geht es ganz leicht, weil ja alles so schön parametriert ist:

1. Rand oben: (x,y)=(1.7,t1)
2. Rand rechts: (x,y)=(1.7*t1,2*t1+1)
3. Weg der Kugel: (x,y)=(0.8*t2+0.2,0.5*t2)

4. Gleichsetzen von jeweiligem Rand und Weg: x=x und y=y. Das ergibt jeweils ein Gleichungssystem mit zwei Unbekannten (t1 und t2) und zwei Gleichungen (x=x und y=y).

5. Umstellen nach t: Bringe jedes Gleichungssystem in die Form A*t=b mit A 2x2-Matrix und b 2x1-Vektor.

6. Löse ein Gleichungssystem. Ist ein t negativ, so war es der falsche Rand. Probiere das andere.

Code:
% Beschreibt das Gebiet, in dem sich die Kugel bewegt
x0 = [0 0 1.7 1.7];
y0 = [0 1 3   0  ];
patch(x0,y0,'w');hold on

% Beschreibt den ersten Weg der Kugel
t = 0:0.1:5;
x = 0.8*t+0.2;
y = 0.5*t;
plot(x,y);

% Rand oben:
A = [1.7 -0.8;2 -0.5];
b = [0.2;-1];
t =  A\b
% t negativ ist nicht möglich, also

% Rand rechts:
if any(t)<0
    A = [0 -0.8;1 -0.5];
    b = [-1.5;0];
    t = A\b
end

if all(t)>0
    % t positiv, also einsetzen:
    x_cut = 1.7
    y_cut = t(1)
end


Gruß vom Gast
 
cornetto1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2009, 20:08     Titel:
  Antworten mit Zitat      
Hallo nochmal,

wie gesagt ich bin Anfänger im Umgang mit Matlab. Deshalb scheitert es bei mir schon an der Beschreibung des Gebietes.Ich kann garnicht nachvollziehen, wieso dies hier:

Code:
% Beschreibt das Gebiet, in dem sich die Kugel bewegt
x0 = [0 0 1.7 1.7];
y0 = [0 1 3   0  ];
patch(x0,y0,'w');hold on


das Gebiet beschreibt. Ich dachte, wenn man z.B. folgendes schreibt

Code:
% Beschreibt das Gebiet, in dem sich die Kugel bewegt
x0 = [0 0 1.7 1.7];
plot(x0)


dann plottet Matlab den Vektor x0 gegen seinen Index, was ich auch nachvollziehen kann.
Aber, wie das oben beschriebene Gebiet durch diese beiden Vektoren zustande kommt, kann ich nicht nachvollziehen.
Ausserdem kann ich mit dem Befehl patch nichts anfangen und konnte es auch irgendwie nicht so richtig in Erfahrung bringen. Ich hab nur gelesen, dass dieser Befehl im dreidimensionalen etwas erzeugt, glaub ich. Aber hier habe ich ja nur eine zweidimensionale Graphik.
Also, vielleicht kann mir ja jemand weiterhelfen?!

Viele Grüße! Very Happy

Zuletzt bearbeitet von cornetto1234 am 24.08.2009, 20:29, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 24.08.2009, 20:23     Titel:
  Antworten mit Zitat      
Hallo cornetto1234,

patch ist allgemein für Polygone, sowohl 3D, als auch 2D. Angegeben werden die x- und y-Koordinaten für die Ecken. Die konnte man ja aus Deinem Code herauslesen. Du kannst natürlich auch Deine eigene Beschreibung weiterhin verwenden, sie macht ja im Grunde dasselbe.

Mehr Informationen dazu unter
Code:


Herzliche Grüße
Bijick

P.S. Wenn Du das Kästchen "BBCode in diesem Beitrag deaktivieren" anklickst, kann der Code nicht richtig dargestellt werden. Bitte editier das mal.
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
cornetto1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2009, 21:50     Titel:
  Antworten mit Zitat      
ok,

danke schon mal für die Antwort.
Ich denke ich sehe schon ein wenig klarer! Smile

Aber was ich nicht so ganz verstehe ist erstmal folgendes:
Wenn ich das vom Gast geschriebene ausführe erhalte ich doch als
y_cut = -1.2 und y_cut ist doch das erste Element aus dem berechneten t Vektor, denn y_cut=t(1), der doch nicht negativ sein durfte, oder was interpretiere ich da falsch?
Im übrigen warum soll y_cut das erste Element aus dem Vektor sein und nicht das zweite? Das verstehe ich nicht!

Außerdem bin ich mir nicht sicher wieso t nicht negativ sein darf? Vielleicht einfach aus dem Grund weil der Schnittpunkt der Kugel mit der anderen Geraden im Negativen liegt? Aber ich weiß das ja nur weil ich mir die Geraden vorher angeschaut habe. Aber es könnte ja rein theoretisch auch so sein, dass der Schnittpunkt der Kugel mit der anderen Gerade auch im positiven Bereich liegen würde, wenn sie etwas anders verlaufen würden. Und dann würde mir das vom Gast beschriebene ja garnichts bringen, oder??

Kann mir da jemand weiterhelfen????
Bitte Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 10:50     Titel:
  Antworten mit Zitat      
Hallo Cornetto,

wenn Du es genau so ausführst, bekommst Du

Code:
x_cut =

1.7000

y_cut =

0.9375


Das ist der Schnittpunkt. Zur Erklärung:

In der Parametrierung hast Du selbst festgelegt: t0=0:0.1:1 und t=0:0.1:10. Daraus habe ich entnommen, dass die Parameter (bei mir t0=t(1) und t=t(2)) nicht negativ sein dürfen. t(1) dürfte beispielsweise auch nicht größer als 1 sein, die Abfrage fehlt eigentlich noch.

Dass y_cut = t(1) sein muss, erkennt man aus der Gleichung
1. Rand oben: (x,y)=(1.7,t1)
Da steht x = 1.7, y = t1 = t(1) (=t0 bei Dir)

Leider kann ich nicht so gut erklären...

Gruß vom Gast
 
cornetto1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 13:19     Titel:
  Antworten mit Zitat      
hallo nochmal,

also wenn ich es genauso eingebe, bzw. reinkopiere kommt bei mir folgendes raus:

Code:

>> t =

   -1.2000
   -2.8000


x_cut =

    1.7000


y_cut =

   -1.200
Confused ?????????????????
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

sorry, Du hast recht. Beim Einfügen sind irgendwie die Klammern verrutscht. So ist es richtig:

Code:
% t negativ ist nicht möglich, also
% Rand rechts:
if any(t<0)
    A = [0 -0.8;1 -0.5];
    b = [-1.5;0];
    t = A\b
end
% t positiv, also einsetzen:
if all(t>0)
    x_cut = 1.7
    y_cut = t(1)
end


Gruß vom Gast
 
cornetto1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 23.08.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2009, 18:19     Titel:
  Antworten mit Zitat      
Danke!!1
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.