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

Mehrere Gerade plotten und verbinden

 

Matlablstarter
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2016, 13:51     Titel: Mehrere Gerade plotten und verbinden
  Antworten mit Zitat      
Hallo liebe Community,
Ich sitze zurzeit an einem Matlab Projekt. Im Endeffekt soll man in zwei verschiedene Vektoren einmal Längeneinheiten und in den anderen Vektor zugehörige Radien eingeben. Diese Vektoren sollen dann durchlaufen werden und geplottet werden. Wenn der Radius 0 ist, soll eine gerade geplottet werden, ansonsten ein Kreis mit dem angegebenen Radius.

Also zum Beispiel steht im Vektor v = [100 100 20] und im Vektor r (radius) = [0 50 0], dann soll das Programm zuerst eine Gerade mit der Länge 100, dann ein Kreisstück mit der Länge 100 und dem Radius 50 und dann noch eine Gerade mit der Länge 20 plotten.

Endergebnis soll sein, dass ein Nutzer eben beliebig viele Geraden und Kreisstücke eingibt und daraus dann eine "Straße" bzw. ein Weg geplottet wird.
Ich hoffe das ist einigermaßen verständlich.
Ich habe das Grundgerüst schon fertig, allerdings frage ich mich, wie ich es schaffe, dass die verschiedenen Geraden (jetzt frage ich erstmal nur nach Geraden, eins nach dem anderen, die Kreisstücke würden mich jetzt zu sehr irritieren) aneinander "gehängt" werden.

Also sagen wir mal mein Vektor v sieht so aus v = [60 100] und mein Vektor r = [0 0]. Jetzt sollen zwei Geraden (einmal mit der Länge 60 und dann mit der Länge 100) geplottet werden. Da das Programm auch nicht im VOrhinein weiß, wie viele Geraden geplottet werden sollen, muss das alles abstrakt gehalten sein (eine for-schleife durchläuft den vektor und man greift auf die einzelnen längeneinheiten mit v(i) zu).
Die beiden Geraden zu plotten ist kein Problem, aber wie bekomme ich es hin, dass die zweite Gerade genau dort gestartet wird, wo die andere aufhört ?

Meine Idee bisher war, dass ich am Anfang einen Vektor p = [0 0] initialisiere, von dem aus die erste Grade geplottet wird. Dieser Punkt soll sich dann nach jeder Geraden so verändern, dass er genau am Ende der Geraden ist, so dass von ihm aus weiter geplottet werden kann.

Hat jemand eine Idee, wie man das bewerkstelligen könnte ? Also wie muss sich der Punkt p nach jeder Zeichnung einer Geraden verändern, um sich jetzt auf den zuletzt geplotteten Punkt zu beziehen ?

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


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.11.2016, 22:31     Titel: Re: Mehrere Gerade plotten und verbinden
  Antworten mit Zitat      
Hallo Matlablstarter,

Um eine Strecke zu zeichnen, benötigt man einen Start- und einen Endpunkt. Equivalent dazu sind ein Startpunkt, eine Richtung und die Länge. Die Länge hast Du ja gegeben. Wie sieht es nun mit dem Startpunkt und der Richtung aus?
Bei den Kreissegmenten fehlt die Richtung auch noch: Ein Segment der Länge (meinst Du dann die Bogen- oder die Sehnen-Länge) kann ja nach rechts oder links geöffnet sein.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlablstarter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2016, 08:29     Titel:
  Antworten mit Zitat      
Hallo Jan,
Danke erstmal für die schnelle Antwort.
Also der Startpunkt ist am Anfang Punkt (0|0) und danach soll die Strecke ja immer von der letzten gezeichneten Strecke aus weiter führen. Also ist der Startpunkt nach jedem Zeichnen der Punkt, wo das letzte Zeichnen aufgehört hat, so dass die jetzt zu zeichnende Strecke genau an der zuletzt gezeichneten Strecke ansetzt. Die Richtung st geradeaus, also sagen wir, ich zeichne als erstes eine Strecke von P1(0|0) zu P2(80|0) (also 80 Länge) und setze daran eine weitere Strecke an, dann soll sie genau in die selbe Richtung weitergehen. (In diesem Fall also komplett horizontal)
Wenn ein Kreisstück gezeichnet wurde, soll die Strecke genau so einfach geradeaus weitergezeichnet werden.
Grüße
Matlablstarter
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlablstarter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 03.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2016, 09:03     Titel:
  Antworten mit Zitat      
Bei den Kreissegmenten wird die Richtung durch Länge und radius angegeben. Wenn der Radius positiv ist, geht das Kreissegment nach oben und wenn r negativ ist, geht er nach unten.
Und ich meine die Bogenlänge.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.11.2016, 09:57     Titel:
  Antworten mit Zitat      
Hallo Matlablstarter,

"Geradeaus" heißt zu Beginn also in X-Richtung. "Nach oben" ist bei Kreissegmenten irreführend, denn wenn Du eine 90-Grad-Kruve dazwischen hast, ist "nach oben" nicht mehr sinnvoll. Du brauchst "nach rechts" oder "nach links".

Code:
v = [100 100 20];
r = [0 50 0];

AxesH = axes('NextPlot', 'add');  % Oder "hold on"
Direction = [1, 0];  % Initial direction
iPosition = [0, 0];
for k = 1:length(v)
  if r(k) == 0  % Line segment:
    fPosition = iPosition + v(k) * Direction;
    x = [iPosition(1), fPosition(1)];
    y = [iPosition(2), fPosition(2)];
  else  % Circle segment:
    fPosition = iPosition + ...  % Consider radius, length and current direction
    x = iPosition(1) + ...  % A number of line segments using SIN and COS
    y = iPosition(2) + ...
    Direction = Direction + ...;  % Direction has changed
  end
  line(x, y);
  iPosition = fPosition;  % Start next segment at current end point
end

Es geht also ganz genau so, wie man es auch per Hand auf einem Blatt Papier machen würde: Man setzt den Stift an und geht die gewünschte Länge in die aktuelle Richtung. Dann lässt man den Stift auf dem Papier und nutzt den Endpunkt als neuen Startpunkt: "initial Position" = "final Position". Wenn man ein Kreissegment hatte, wird zudem die Richtung angepasst.

Gruß, Jan
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 - 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.