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

Dreieck in einem Kartesisches Koordinatensystem darstellt.

 

Serenum
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 24.06.2017, 12:28     Titel: Dreieck in einem Kartesisches Koordinatensystem darstellt.
  Antworten mit Zitat      
Hallo alle zusammen,

ich bin hier ganz neu. Vorab, ich habe nicht so viel Ahnung von Matlab, daher bin ich hier.

Ich habe folgendes anliegen: ich muss ein Programm schreiben welches ein Dreieck in einem Kartesisches Koordinatensystem darstellt.
Mir ist zu mindestens gelungen, dass die Punkte angezeigt werden, aber wie man die miteinander verbindet weiß ich nicht.

Wenn mir da jemand helfen könnte, wäre es echt toll.

Code:

clear all   % Leere bzw. lösche alles

A = [2 3];
B = [7 4];
C = [4 6];

figure
hold on
grid on
plot(A(:,1),A(:,2),'ro')   % r = red (rot), o = Markertyp Kreis
plot(B(:,1),B(:,2),'go')   % g = green (grün) , o = Markertyp Kreis
plot(C(:,1),C(:,2),'bo')   % b = blue (blau) , o = Markertyp Kreis
title('Kartesisches System')
xlabel('X-Achse (Abszisse)')
ylabel('Y-Achse (Ordinate)')
legend('Punkt-A','Punkt-B','Punkt-C')
 
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: 24.06.2017, 14:40     Titel: Re: Dreieck in einem Kartesisches Koordinatensystem darstell
  Antworten mit Zitat      
Hallo Serenum,

Wie schon so oft, rate ich dazu clear all zu vermeiden. Es löscht alle Funktionen, die vorher ins RAM geladen wurden und das Neuladen von der Platte kostet viel Zeit. Das mag zwar nur eine Sekunde dauern, aber in produktivem Code, also "echten" Programmen, hat das nichts verloren. Deshalb ist es eine gute Strategie, sich das erst gar nicht anzugewöhnen. Verwende lieber Funktionen, um den Workspace sauber zu halten.

Ich wundere mich immer wieder, wie so viele Matlab-Anfänger gleich an diesen Befehl kommen. Irgendwo muss der empfohlen werden, obwohl er sehr schnell wirklich lästig wird.

Aber nun zu Deinem Problem.
Siehe
Code:

Du kannst dem plot Befehl also Vektoren als Eingabe geben. Du benötigst dann 4 Koordinaten, damit das Dreieck wieder gesclossen ist.
Probiere es mal aus und poste wieder, wenn es noch nicht funktioniert.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 25.06.2017, 02:21     Titel:
  Antworten mit Zitat      
Super, Danke!

Ich werde 'clear all' nicht mehr verwenden, zumindestens in diesem Fall.

Ich habe jetzt einiges ausprobiert und das ist dabei rausgekommen:

Code:

x1=input('Eingabe: X-Wert des Punktes A, x1= ');   % Zuweisung eines Wertes
y1=input('Eingabe: Y-Wert des Punktes A, y1= ');   % Zuweisung eines Wertes
x2=input('Eingabe: X-Wert des Punktes B, x2= ');   % Zuweisung eines Wertes
y2=input('Eingabe: Y-Wert des Punktes B, y2= ');   % Zuweisung eines Wertes
x3=input('Eingabe: X-Wert des Punktes C, x3= ');   % Zuweisung eines Wertes
y3=input('Eingabe: Y-Wert des Punktes C, y3= ');   % Zuweisung eines Wertes
 
A = [x1 y1];   % Wert zum eingeben: x1 = 2 und y1 = 3
B = [x2 y2];   % Wert zum eingeben: x2 = 7 und y2 = 4
C = [x3 y3];   % Wert zum eingeben: x3 = 4 und y3 = 6
 
figure      %
axis square   % Quadratischer Plot
hold on      % plottet mehrere Funktionen in einem plot
grid on      % blende ein Gitter ein

xlim([-11 11]) % Bereich für x Achse
ylim([-11 11]) % Bereich für y Achse  

% Legt die Schrittweite der X-Achse fest, in diesem Fall 1
XLim = get(gca, 'XLim');
stepBy = 1;
set(gca, 'XTick', XLim(1):stepBy:XLim(2))

% Legt die Schrittweite der Y-Achse fest, in diesem Fall 1
YLim = get(gca, 'YLim');
stepBy = 1;
set(gca, 'YTick', YLim(1):stepBy:YLim(2))

% Verschiebt die X-Achsenlinie zum Ursprung
ax = gca;
ax.XAxisLocation = 'origin'
% Verschiebt die Y-Achsenlinie zum Ursprung
ay = gca;
ay.YAxisLocation = 'origin'
 
plot(A(:,1),A(:,2),'or')         % r = red (rot), o = Markertyp Kreis
plot(B(:,1),B(:,2),'og')         % g = green (grün) , o = Markertyp Kreis
plot(C(:,1),C(:,2),'ob')         % b = blue (blau) , o = Markertyp Kreis
plot([0,x2*1.5],[0,y2*1.5],':r')   % Spiegelachse
 
plot([x1,x2],[y1,y2],'-k')         % linie zwischen Punkt A und B
plot([x2,x3],[y2,y3],'-k')         % linie zwischen Punkt B und C
plot([x3,x1],[y3,y1],'-k')         % linie zwischen Punkt C und A
 
title('Kartesisches System')                                    % Beschriftung des Koordinatensystems
xlabel('X-Achse (Abszisse)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
ylabel('Y-Achse (Ordinate)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
legend('Punkt-A','Punkt-B','Punkt-C','Spiegelachse','Location','southeast')   % Beschriftung des Koordinatensystems

% Für später:
% dlmwrite('test.csv',G,',')   % Schreibt eine Datei | Dateiname | was gespeichert werden soll | Trennzeichen Komma
% type('test.csv')            % Zeigt welche Daten in der Datei sind.
 


Nun muss ich jetzt den erzeugten Dreieck an der Spiegelachse spiegeln, die ABC-Punkte beim dem gespiegeltem Dreieck auslesen und in einer CSV-Datei speichern.

Aber ich weiß nicht wie das geht.

Hat jemand Tipps, wie das zu machen wäre?
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: 26.06.2017, 12:16     Titel:
  Antworten mit Zitat      
Hallo Serenum,

Weißt Du, wie man Koordinaten an einer Achse spiegelt? Wenn nicht, frage erstmal WikiPedia. Danach hilft csvwrite . Probiere es mal aus (siehe Dokumentation) und stelle eine konkrete Frage, falls etwas noch nicht klappt.

Gruß, Jan

Zuletzt bearbeitet von Jan S am 27.06.2017, 14:39, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Serenum
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 27.06.2017, 08:39     Titel:
  Antworten mit Zitat      
Hallo Jan,

das ist ja mal wieder sehr hilfreich! Ist ja immer wieder schön sowas zu lesen, siehe Wiki. Bin wirklich Anfänger und habe den Code im Alleingang eben unter anderem durch Wiki gelöst. Jetzt komme ich aber nicht weiter.

Außer dem was gibt es an der Frage nicht zu verstehen z.B. dass der erzeugte Dreieck an der Spiegelachse gespiegelt werden soll.

Nun ja, egal.

Gruß Serenum.
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: 27.06.2017, 14:47     Titel:
  Antworten mit Zitat      
Hallo Serenum,

Zitat:
Außer dem was gibt es an der Frage nicht zu verstehen z.B. dass der erzeugte Dreieck an der Spiegelachse gespiegelt werden soll.

Mit der entsprechenden Formel ist die Umsetzung in Matlab eigentlich recht einfach. Wenn man nun davon ausgeht, dass Du die Formel schon kennst und versucht hast, sie in Matlab zu implementieren, ist dabei wohl ein Problem aufgetreten, das Du aber bisher nicht erwähnt hast. Deine Frage ist also noch zu allgemein formuliert um effizient beantwortet zu werden. Darum habe ich eher generelle Ratschläge gepostet.

Das gleiche gilt für das Erstellen eines CSV-Files: Das ist in der Dokumentation umfassend erklärt. Bisher hast Du noch nicht erklärt, welche Schwierigkeiten Du damit hast. Daraufhin den Help-Text nachzuerzählen wäre nicht sinnvoll.

Wenn Du also ein konktretes Problem mit der Implementierung in Matlab hast, poste den Code, mit dem Du es bisher versucht hast, die Formel, die Du programmieren möchtest und stelle eine konkrete Frage dazu.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 02.07.2017, 03:20     Titel:
  Antworten mit Zitat      
Poste demnächst meinen Fortschritt. Bin gerade noch am rumprobieren und versuche auch meine Fragen konkreter zu formulieren.

Gruß Serenum.
Private Nachricht senden Benutzer-Profile anzeigen
 
Serenum
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 13.07.2017, 21:25     Titel:
  Antworten mit Zitat      
Hallo,

also hier ist der Code den ich bis jetzt alleine und mit Hilfe des Forums geschrieben habe. Der funktioniert nicht so richtig. Hier ist das Problem, dass keine Linien zwischen den gespiegelten Punkten gezeichnet werden. Wenn ich diese Zeile "plot([E1,E2],[y1,y2],'-k') % Linie zwischen Punkt A und C" an die Stelle "%=>hier müssen jetzt die Linien zwischen den gespiegelten Punkten gezogen werden" einfüge. Außerdem stimmt auch davor irgendwas nicht.

Code:
x1=input('Eingabe: X-Wert des Punktes A, x1= ');   % Zuweisung eines Wertes
y1=input('Eingabe: Y-Wert des Punktes A, y1= ');   % Zuweisung eines Wertes
x2=input('Eingabe: X-Wert des Punktes B, x2= ');   % Zuweisung eines Wertes
y2=input('Eingabe: Y-Wert des Punktes B, y2= ');   % Zuweisung eines Wertes
x3=input('Eingabe: X-Wert des Punktes C, x3= ');   % Zuweisung eines Wertes
y3=input('Eingabe: Y-Wert des Punktes C, y3= ');   % Zuweisung eines Wertes
 
A = [x1 y1];   % Wert zum eingeben: x1 = 2 und y1 = 3
B = [x2 y2];   % Wert zum eingeben: x2 = 7 und y2 = 4
C = [x3 y3];   % Wert zum eingeben: x3 = 4 und y3 = 6
 
figure      %
axis square   % Quadratischer Plot
hold on      % plottet mehrere Funktionen in einem plot
grid on      % blende ein Gitter ein

xlim([-11 11]) % Bereich für x Achse
ylim([-11 11]) % Bereich für y Achse  

% Legt die Schrittweite der X-Achse fest, in diesem Fall 1
XLim = get(gca, 'XLim');
stepBy = 1;
set(gca, 'XTick', XLim(1):stepBy:XLim(2))

% Legt die Schrittweite der Y-Achse fest, in diesem Fall 1
YLim = get(gca, 'YLim');
stepBy = 1;
set(gca, 'YTick', YLim(1):stepBy:YLim(2))

% Verschiebt die X-Achsenlinie zum Ursprung
ax = gca;
ax.XAxisLocation = 'origin'
% Verschiebt die Y-Achsenlinie zum Ursprung
ay = gca;
ay.YAxisLocation = 'origin'

%=>Darstellung des Dreiecks
plot(A(:,1),A(:,2),'or')         % r = red (rot), o = Markertyp Kreis
plot(B(:,1),B(:,2),'og')         % g = green (grün) , o = Markertyp Kreis
plot(C(:,1),C(:,2),'ob')         % b = blue (blau) , o = Markertyp Kreis
pause
plot([x1,x2],[y1,y2],'-k')         % linie zwischen Punkt A und B
plot([x2,x3],[y2,y3],'-k')         % linie zwischen Punkt B und C
plot([x3,x1],[y3,y1],'-k')         % linie zwischen Punkt C und A
pause
plot([0,x2*1.5],[0,y2*1.5],':r')   % Spiegelachse
pause

%=>Berechnung der Spiegelung
C1=solve('x2*x2*i+y2*y2*i-x1*x2-y1*y2=0','i');
T=subs(C1);
D1=T*x2;
D2=T*y2;
E1=[x1+2*(D1-x1);y1+2*(D2-y1)]';  % E1 ist der gespiegelte Vektor von A
C2=solve('x2*x2*i+y2*y2*i-x3*x2-y3*y2=0','i');
T=subs(C2);
D3=T*x2;
D4=T*y2;
E2=[x3+2*(D3-x3);y3+2*(D4-y3)]';  % E2 ist der gespiegelte Vektor von C

%=>  Darstellung der Spiegelung  <=%
plot(E1(:,1),E2(:,2),'or')         % Spiegelung von Punkt A
plot(E2(:,1),E2(:,2),'ob')         % Spiegelung von Punkt C

%=>hier müssen jetzt die Linien zwischen den gespiegelten Punkten gezogen
%werden
 
title('Kartesisches System')                                    % Beschriftung des Koordinatensystems
xlabel('X-Achse (Abszisse)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
ylabel('Y-Achse (Ordinate)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
legend('Punkt-A','Punkt-B','Punkt-C','Spiegelachse','Location','southeast')   % Beschriftung des Koordinatensystems
 


Dann der zweite Code. Hier funktioniert es nicht mehr nach dem die Eingabeüberprüfung gemacht wurde. Was Wünschenswert währe. Aber was die Sache ist keine Ahnung.

Es gibt zwei Varianten mit Verschiedenen Ansätzen:

Variante 1:

Code:
disp ('Bitte geben Sie Werte für x und y der Punkte A, B und C des Dreiecks ein:')
pause
 
x1=input('Eingabe: X-Wert des Punktes A, x1= ','s');
while (isnan(str2double(x1)))
    disp ('Die Eingabe ist unzulässig! Es sind nur Zahlen erlaubt...')
    x1=input('Eingabe: X-Wert des Punktes A, x1= ','s');
end
y1=input('Eingabe: X-Wert des Punktes A, y1= ','s');
while (isnan(str2double(y1)))
    disp ('Die Eingabe ist unzulässig! Es sind nur Zahlen erlaubt...')
    y1=input('Eingabe: X-Wert des Punktes A, y1= ','s');
end

x2=input('Eingabe: X-Wert des Punktes B, x2= ','s');
while (isnan(str2double(x2)))
    disp ('Die Eingabe ist unzulässig! Es sind nur Zahlen erlaubt...')
    x1=input('Eingabe: X-Wert des Punktes B, x2= ','s');
end
y2=input('Eingabe: X-Wert des Punktes B, y2= ','s');
while (isnan(str2double(y2)))
    disp ('Die Eingabe ist unzulässig! Es sind nur Zahlen erlaubt...')
    y2=input('Eingabe: X-Wert des Punktes B, y2= ','s');
end

x3=input('Eingabe: X-Wert des Punktes C, x3= ','s');
while (isnan(str2double(x3)))
    disp ('Die Eingabe ist unzulässig! Es sind nur Zahlen erlaubt...')
    x3=input('Eingabe: X-Wert des Punktes C, x3= ','s');
end
y3=input('Eingabe: X-Wert des Punktes C, y3= ','s');
while (isnan(str2double(y3)))
    disp ('Die Eingabe ist unzulässig! Es sind nur Zahlen erlaubt...')
    y3=input('Eingabe: X-Wert des Punktes C, y3= ','s');
end
 
A = [x1 y1];   % Wert zum eingeben: x1 = 2 und y1 = 3
B = [x2 y2];   % Wert zum eingeben: x2 = 7 und y2 = 4
C = [x3 y3];   % Wert zum eingeben: x3 = 4 und y3 = 6
 
figure      %
axis square   % Quadratischer Plot
hold on      % plottet mehrere Funktionen in einem plot
grid on      % blende ein Gitter ein

xlim([-11 11]) % Bereich fuer X-Achse
ylim([-11 11]) % Bereich fuer Y-Achse  

% Legt die Schrittweite der X-Achse fest, in diesem Fall 1
XLim = get(gca, 'XLim');
stepBy = 1;
set(gca, 'XTick', XLim(1):stepBy:XLim(2))

% Legt die Schrittweite der Y-Achse fest, in diesem Fall 1
YLim = get(gca, 'YLim');
stepBy = 1;
set(gca, 'YTick', YLim(1):stepBy:YLim(2))

% Verschiebt die X-Achsenlinie zum Ursprung
ax = gca;
ax.XAxisLocation = 'origin'
% Verschiebt die Y-Achsenlinie zum Ursprung
ay = gca;
ay.YAxisLocation = 'origin'

%=>Darstellung des Dreiecks
plot(A(:,1),A(:,2),'or')   % Plotet den Punkt A, Markertyp Kreis, Markerfarbe rot
plot(B(:,1),B(:,2),'og')   % Plotet den Punkt B, Markertyp Kreis, Markerfarbe gruen
plot(C(:,1),C(:,2),'ob')   % Plotet den Punkt C, Markertyp Kreis, Markerfarbe blau

disp('Pause > Mit beliebiger Taste weiter')   % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an

plot([x1,x2],[y1,y2],'-k')   % Plotet ein linie zwischen Punkt A und B, Linienstil durchgezogen, Linienfarbe schwarz
plot([x2,x3],[y2,y3],'-k')   % Plotet ein linie zwischen Punkt B und C, Linienstil durchgezogen, Linienfarbe schwarz
plot([x3,x1],[y3,y1],'-k')   % Plotet ein linie zwischen Punkt C und A, Linienstil durchgezogen, Linienfarbe schwarz

disp('Pause > Mit beliebiger Taste weiter') % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an

plot([0,x2*1.5],[0,y2*1.5],':r')   % Plotet die Spiegelachse, Linienstil gepunktet, Linienfarbe rot

disp('Pause > Mit beliebiger Taste weiter')   % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause % Haelt die Ausführung an

% *** Berechnung der Spiegelung *** %
C1=solve('x2*x2*i+y2*y2*i-x1*x2-y1*y2=0','i');
T=subs(C1);
D1=T*x2;
D2=T*y2;
E1=[x1+2*(D1-x1);y1+2*(D2-y1)]';  % E1 ist der gespiegelte Vektor von A
C2=solve('x2*x2*i+y2*y2*i-x3*x2-y3*y2=0','i');
T=subs(C2);
D3=T*x2;
D4=T*y2;
E2=[x3+2*(D3-x3);y3+2*(D4-y3)]';  % E2 ist der gespiegelte Vektor von C

% *** Darstellung der Spiegelung *** %
plot(E1(:,1),E2(:,2),'om')   % Spiegelung von Punkt A', Markertyp Kreis, Markerfarbe gelb
plot(E2(:,1),E2(:,2),'oc')   % Spiegelung von Punkt C', Markertyp Kreis, Markerfarbe cyan

plot([E1,E2],[y1,y2],'-k')   % Linie zwischen Punkt A und C

%=>hier müssen jetzt die Linien zwischen den gespiegelten Punkten gezogen
%werden
 
title('Kartesisches System')                                    % Beschriftung des Koordinatensystems
xlabel('X-Achse (Abszisse)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
ylabel('Y-Achse (Ordinate)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
legend('Punkt-A','Punkt-B','Punkt-C','Spiegelachse','Location','southeast')   % Beschriftung des Koordinatensystems


Variante 2:
Code:
disp ('Bitte geben Sie Werte für x und y der Punkte A, B und C des Dreiecks ein:')
pause

flag = 0;
while flag == 0
    x1=input('Eingabe: X-Wert des Punktes A, x1= ','s');
    x1_double = str2double(x1);
    if ~isfinite(x1_double)
        disp ('Die Eingabe ist unzulässig!')
    else
        flag = 1;
    end
end
flag = 0;
while flag == 0
    y1=input('Eingabe: X-Wert des Punktes A, y1= ','s');
    y1_double = str2double(y1);
    if ~isfinite(y1_double)
        disp ('Die Eingabe ist unzulässig!')
    else
        flag = 1;
    end
end

flag = 0;
while flag == 0
    x2=input('Eingabe: X-Wert des Punktes B, x2= ','s');
    x2_double = str2double(x2);
    if ~isfinite(x2_double)
        disp ('Die Eingabe ist unzulässig!')
    else
        flag = 1;
    end
end

flag = 0;
while flag == 0
    y2=input('Eingabe: X-Wert des Punktes B, y2= ','s');
    y2_double = str2double(y2);
    if ~isfinite(y2_double)
        disp ('Die Eingabe ist unzulässig!')
    else
        flag = 1;
    end
end

flag = 0;
while flag == 0
    x3=input('Eingabe: X-Wert des Punktes C, x3= ','s');
    x3_double = str2double(x3);
    if ~isfinite(x3_double)
        disp ('Die Eingabe ist unzulässig!')
    else
        flag = 1;
    end
end

flag = 0;
while flag == 0
    y3=input('Eingabe: X-Wert des Punktes C, y3= ','s');
    y3_double = str2double(y3);
    if ~isfinite(y3_double)
        disp ('Die Eingabe ist unzulässig!')
    else
        flag = 1;
    end
end
 
A = [x1 y1];   % Wert zum eingeben: x1 = 2 und y1 = 3
B = [x2 y2];   % Wert zum eingeben: x2 = 7 und y2 = 4
C = [x3 y3];   % Wert zum eingeben: x3 = 4 und y3 = 6
 
figure      %
axis square   % Quadratischer Plot
hold on      % plottet mehrere Funktionen in einem plot
grid on      % blende ein Gitter ein

xlim([-11 11]) % Bereich fuer X-Achse
ylim([-11 11]) % Bereich fuer Y-Achse  

% Legt die Schrittweite der X-Achse fest, in diesem Fall 1
XLim = get(gca, 'XLim');
stepBy = 1;
set(gca, 'XTick', XLim(1):stepBy:XLim(2))

% Legt die Schrittweite der Y-Achse fest, in diesem Fall 1
YLim = get(gca, 'YLim');
stepBy = 1;
set(gca, 'YTick', YLim(1):stepBy:YLim(2))

% Verschiebt die X-Achsenlinie zum Ursprung
ax = gca;
ax.XAxisLocation = 'origin'
% Verschiebt die Y-Achsenlinie zum Ursprung
ay = gca;
ay.YAxisLocation = 'origin'

%=>Darstellung des Dreiecks
plot(A(:,1),A(:,2),'or')   % Plotet den Punkt A, Markertyp Kreis, Markerfarbe rot
plot(B(:,1),B(:,2),'og')   % Plotet den Punkt B, Markertyp Kreis, Markerfarbe gruen
plot(C(:,1),C(:,2),'ob')   % Plotet den Punkt C, Markertyp Kreis, Markerfarbe blau

disp('Pause > Mit beliebiger Taste weiter')   % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an

plot([x1,x2],[y1,y2],'-k')   % Plotet ein linie zwischen Punkt A und B, Linienstil durchgezogen, Linienfarbe schwarz
plot([x2,x3],[y2,y3],'-k')   % Plotet ein linie zwischen Punkt B und C, Linienstil durchgezogen, Linienfarbe schwarz
plot([x3,x1],[y3,y1],'-k')   % Plotet ein linie zwischen Punkt C und A, Linienstil durchgezogen, Linienfarbe schwarz

disp('Pause > Mit beliebiger Taste weiter') % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an

plot([0,x2*1.5],[0,y2*1.5],':r')   % Plotet die Spiegelachse, Linienstil gepunktet, Linienfarbe rot

disp('Pause > Mit beliebiger Taste weiter')   % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause % Haelt die Ausführung an

% *** Berechnung der Spiegelung *** %
C1=solve('x2*x2*i+y2*y2*i-x1*x2-y1*y2=0','i');
T=subs(C1);
D1=T*x2;
D2=T*y2;
E1=[x1+2*(D1-x1);y1+2*(D2-y1)]';  % E1 ist der gespiegelte Vektor von A
C2=solve('x2*x2*i+y2*y2*i-x3*x2-y3*y2=0','i');
T=subs(C2);
D3=T*x2;
D4=T*y2;
E2=[x3+2*(D3-x3);y3+2*(D4-y3)]';  % E2 ist der gespiegelte Vektor von C

% *** Darstellung der Spiegelung *** %
plot(E1(:,1),E2(:,2),'om')   % Spiegelung von Punkt A', Markertyp Kreis, Markerfarbe gelb
plot(E2(:,1),E2(:,2),'oc')   % Spiegelung von Punkt C', Markertyp Kreis, Markerfarbe cyan

plot([E1,E2],[y1,y2],'-k')   % Linie zwischen Punkt A und C

%=>hier müssen jetzt die Linien zwischen den gespiegelten Punkten gezogen
%werden
 
title('Kartesisches System')                                    % Beschriftung des Koordinatensystems
xlabel('X-Achse (Abszisse)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
ylabel('Y-Achse (Ordinate)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung des Koordinatensystems
legend('Punkt-A','Punkt-B','Punkt-C','Spiegelachse','Location','southeast')   % Beschriftung des Koordinatensystems


Also es muss aus den drei Varianten eins gemacht werden. Eingabeüberprüfung und Linien zwischen den gespiegelten Punkten.

Vielleicht hat jemand eine Idee.

Gruß Serenum.
Private Nachricht senden Benutzer-Profile anzeigen
 
Serenum
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 14.07.2017, 00:36     Titel:
  Antworten mit Zitat      
Ich habe es mit den Linien zwischen den gespiegelten Punkten lösen können. Aber die Legende wird jetzt falsch angezeigt und die Überprüfung fehlt.

Hat jemand eine Idee?

Code:
% *** Programm START *** %
disp ('Bitte geben Sie x- und y-Werte für die Punkte A, B und C des Dreiecks ein:')
disp ('(Es sind nur reelle Zahlen erlaubt!)')
disp ('(Beispiel: x1 = 2, y1 = 3, x2 = 7, y2 = 4, x3 = 4, y3 = 6)')
pause % Haelt die Ausführung an...

% *** Eingabe von x- und y-Werten *** %
x1=input('Eingabe: X-Wert des Punktes A, x1= ');   % Zuweisung eines Wertes
y1=input('Eingabe: Y-Wert des Punktes A, y1= ');   % Zuweisung eines Wertes
x2=input('Eingabe: X-Wert des Punktes B, x2= ');   % Zuweisung eines Wertes
y2=input('Eingabe: Y-Wert des Punktes B, y2= ');   % Zuweisung eines Wertes
x3=input('Eingabe: X-Wert des Punktes C, x3= ');   % Zuweisung eines Wertes
y3=input('Eingabe: Y-Wert des Punktes C, y3= ');   % Zuweisung eines Wertes
 
A = [x1 y1];   % Wert zum eingeben: x1 = 2 und y1 = 3
B = [x2 y2];   % Wert zum eingeben: x2 = 7 und y2 = 4
C = [x3 y3];   % Wert zum eingeben: x3 = 4 und y3 = 6
 
figure      
axis square   % Quadratischer Plot
hold on      % Plottet mehrere Funktionen in einem plot
grid on      % Blende ein Gitter ein

xlim([-11 11]) % Bereich fuer X-Achse
ylim([-11 11]) % Bereich fuer Y-Achse  

% Legt die Schrittweite der X-Achse fest, in diesem Fall 1
XLim = get(gca, 'XLim');
stepBy = 1;
set(gca, 'XTick', XLim(1):stepBy:XLim(2))

% Legt die Schrittweite der Y-Achse fest, in diesem Fall 1
YLim = get(gca, 'YLim');
stepBy = 1;
set(gca, 'YTick', YLim(1):stepBy:YLim(2))

% *** Verschiebt die X-Achsenlinie zum Ursprung *** %
ax = gca;
ax.XAxisLocation = 'origin'
% *** Verschiebt die Y-Achsenlinie zum Ursprung *** %
ay = gca;
ay.YAxisLocation = 'origin'

% *** Darstellung des Dreiecks *** %
plot(A(:,1),A(:,2),'or')   % Plotet den Punkt A, Markertyp Kreis, Markerfarbe rot
plot(B(:,1),B(:,2),'og')   % Plotet den Punkt B, Markertyp Kreis, Markerfarbe gruen
plot(C(:,1),C(:,2),'ob')   % Plotet den Punkt C, Markertyp Kreis, Markerfarbe blau

disp('Pause > Mit beliebiger Taste weiter')   % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an...

% *** Zeichnet die Linien zwischen den Punkten A, B und C *** %
plot([x1,x2],[y1,y2],'-k')   % Plotet ein linie zwischen Punkt A und B, Linienstil durchgezogen, Linienfarbe schwarz
plot([x2,x3],[y2,y3],'-k')   % Plotet ein linie zwischen Punkt B und C, Linienstil durchgezogen, Linienfarbe schwarz
plot([x3,x1],[y3,y1],'-k')   % Plotet ein linie zwischen Punkt C und A, Linienstil durchgezogen, Linienfarbe schwarz

disp('Pause > Mit beliebiger Taste weiter') % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an...

% *** Darstellung der Spiegelachse *** %
plot([0,x2*1.5],[0,y2*1.5],':r')   % Plotet die Spiegelachse, Linienstil gepunktet, Linienfarbe rot

disp('Pause > Mit beliebiger Taste weiter')   % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
pause   % Haelt die Ausführung an...

% *** Berechnung der Spiegelung *** %
C1=solve('x2*x2*i+y2*y2*i-x1*x2-y1*y2=0','i');
T=subs(C1);
D1=T*x2;
D2=T*y2;
E1=[x1+2*(D1-x1);y1+2*(D2-y1)]';  % E1 ist der gespiegelte Vektor von A'
C2=solve('x2*x2*i+y2*y2*i-x3*x2-y3*y2=0','i');
T=subs(C2);
D3=T*x2;
D4=T*y2;
E2=[x3+2*(D3-x3);y3+2*(D4-y3)]';  % E2 ist der gespiegelte Vektor von C'

% *** Sym-Datentyp wird in Double-Datentyp umgewandelt *** %
A2 = (double(E1))   % Aus E1 wird A2
C2 = (double(E2))   % Aus E2 wird C2

% *** Zuweisung der Ergebnise *** %
x4 = A2(:,1)   % x4 wird der Spaltenwert 1 von A2 zugewiesen
y4 = A2(:,2)   % y4 wird der Spaltenwert 2 von A2 zugewiesen

x5 = C2(:,1)   % x5 wird der Spaltenwert 1 von C2 zugewiesen
y5 = C2(:,2)   % y5 wird der Spaltenwert 1 von C2 zugewiesen

% *** Darstellung der Spiegelung *** %
plot(E1(:,1),E2(:,2),'om')   % Spiegelung von Punkt A2, Markertyp Kreis, Markerfarbe gelb
plot(E2(:,1),E2(:,2),'oc')   % Spiegelung von Punkt C2, Markertyp Kreis, Markerfarbe cyan

% *** Beschriftung des Koordinatensystems *** %
title('Kartesisches System')                                    % Beschriftung des Titels
xlabel('X-Achse (Abszisse)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung der Abszisse, Schriftart Fett, Farbe grau (RGB)
ylabel('Y-Achse (Ordinate)','FontWeight','bold','Color','[0.7 0.7 0.7]')   % Beschriftung der Ordinate, Schriftart Fett, Farbe grau (RGB)
legend('Punkt-A','Punkt-B/B2','Punkt-C','Spiegelachse','Punkt-A2','Punkt-C2','Location','southeast')   % Beschriftung der Legende, Legende Position SüdWest

% *** Zeichnet die Linien zwischen den Punkten A2, B2/B und C2 *** %
plot([x4,x2],[y4,y2],'-','Color','[0.7 0.7 0.7]')   % Linie zwischen Punkt A2 und B2/B, Linienstil durchgezogen, Linienfarbe grau
plot([x2,x5],[y2,y5],'-','Color','[0.7 0.7 0.7]')   % Linie zwischen Punkt B2/B und C2, Linienstil durchgezogen, Linienfarbe grau
plot([x4,x5],[y4,y5],'-','Color','[0.7 0.7 0.7]')   % linie zwischen Punkt A2 und C2, Linienstil durchgezogen, Linienfarbe grau
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: 14.07.2017, 17:16     Titel:
  Antworten mit Zitat      
Hallo Serenum,

Es ist unwahrscheinlich, dass jemand im Forum einen so großen Code-Brocken durchliest. Die Erklärung:
Zitat:
Aber die Legende wird jetzt falsch angezeigt und die Überprüfung fehlt.

erlaubt kaum zu verstehen, was das Problem ist.
Bitte poste nur den relevanten Code für die aktuelle Frage. Da man als Leser nicht wissen kann, was Du als "falsch angezeigt" empfindest, wäre es hilfreich zu erklären, was denn "richtig" wäre. Auf "die Überprüfung" fehlt kann ich auch nicht wirklich etwas antworten.

Code:
xlabel('X-Achse (Abszisse)','FontWeight','bold','Color','[0.7 0.7 0.7]')

Die Quotes gehören hier nicht hin: Die Color ist hier kein String '[0.7, 0.7, 0.7]' sondern der Vektor [0.7, 0.7, 0.7]. Seltsamerweise functioniert es aber trotzdem! Matlab ist manchmal erschreckend schlau... Ich würde trotzdem einen RGB Vektor verwenden.

Zitat:
legend('Punkt-A','Punkt-B/B2','Punkt-C','Spiegelachse','Punkt-A2','Punkt-C2','Location','southeast') % Beschriftung der Legende, Legende Position SüdWest

Im Code steht "southeast", im Kommentar "SüdWest". Ist das das Problem?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 14.07.2017, 23:44     Titel:
  Antworten mit Zitat      
Hallo Jan,

bei der Position der Legende habe mich verschrieben. Danke für den Tipp.

Okay, versuchen wir mal stück für stück. In der Legende sollen folgende Plots dargestellt werden:

- Punk A, B, C -> das wird wie gewünscht dargestellt
- Spiegelachse -> das wird wie gewünscht dargestellt
- Punkt A2, C2 -> das wird nicht wie gewünscht dargestellt

Wie kann ich also nur ausgewählte Plots in der Legende darstellen?

Gruß Serenum.
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: 18.07.2017, 16:58     Titel:
  Antworten mit Zitat      
Hallo Serenum,

Bitte lese Deine Frage nochmal selbst durch und beurteile, ob ein Leser im Forum Dir folgen könnte.

Zitat:
- Punk A, B, C -> das wird wie gewünscht dargestellt
- Spiegelachse -> das wird wie gewünscht dargestellt
- Punkt A2, C2 -> das wird nicht wie gewünscht dargestellt

Hierzu muss man jetzt wieder ganz nach oben scrollen und eine Menge Text und Code durchlesen, bevor man wissen kann, was genau "Punkt A, B, C" ist. Was "A2, C2" ist und was genau "nicht wie gewünscht" bedeutet, bekomme ich nicht heraus. Was wäre denn gewünscht und was siehst Du stattdessen? Kannst Du den relevanten Teil des Codes posten?

Zitat:
Wie kann ich also nur ausgewählte Plots in der Legende darstellen?

Was bedeutet "ausgewählt"? Wo wählst Du was aus?

Die Aufgabe war doch, ein Dreieck darzustellen und es an einer Achse zu spiegeln, oder?
Dies als Funktion zu schreiben und sie mit Input-Argumenten auf zu rufen, wäre naheliegend und einfacher als die Schlacht mit den input Befehlen. Ich würed auch alle Punkte in eine Matrix schreiben, weil das einfacher ist als 3 Variablen A,B,C zu erzeuigen, die dann doch alle genau gleich behandelt werden.

Da ich keine Symbolic Toolbox habe, hätte ich die Spiegelung so durchgeführt:
Punkte so rotieren per Rotations-Matrix, dass die Spiegel-Gerade vertikal liegt, Punkte so tranlatieren, dass die Spiegel-Gerade durch den Ursprung führt, dann die Vorzeichen der X Werte ändern. Danach wieder zurück-translatieren und -rotieren. Alle Punkte vor und nach der Spiegelung mit jeweils einem plot Befehl zeichnen.

Aber Du bist ja nun schon fast an Deinem Ziel, dann wäre es nicht hilfreich, die Methode grundsätzlich zu ändern.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 20.07.2017, 01:35     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich wollte zuerst einen langen Text schreiben. Aber das habe ich seinlassen, den egal wie ich meine Fragen formuliere, passt es ständig nicht. Sehr seltsam. Ich kam hierher, in dieses Forum, in der Hoffnung, dass ich Hilfe erhalte. Denn mit Matlab habe ich nie gearbeitet, habe aber die Aufgabe bekommen die ich lösen muss.

Aber das hier ergibt keinen Sinn mehr für mich und macht auch echt kein Spaß mehr.

Dennoch möchte ich diesem Forum danken, denn es enthält viele nützliche Sachen die mich in meinem Anliegen weitergebracht haben. Es ist toll, dass es Menschen gibt, die einem gerne Helfen.

Mit vielen Grüßen Serenum.
Private Nachricht senden Benutzer-Profile anzeigen
 
Serenum
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 20.07.2017, 02:13     Titel:
  Antworten mit Zitat      
Nachtrag...

...ich habe es mittlerweile selbst rausgefunden. Das habe ich gemeint (siehe Bild) und habe das so gelöst:

Code:
p5 = plot(A2(:,1),A2(:,2),'om');
%...
legend([p1 p2 p3 p4 p5 p6],'Punkt-A','Punkt-B/B2','Punkt-C','Spiegelachse','Punkt-A2','Punkt-C2','Location','southeast')


Bild: http://www.bilder-upload.eu/show.php?file=27afc0-1500509610.jpg
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.