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

For-Schleife

 

spodec90
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2015, 15:52     Titel: For-Schleife
  Antworten mit Zitat      
Hallo,

Ich muss für die Uni eine Aufgabe bearbeiten. Es geht darum ein Windrad zu erstellen. Es soll dabei zunächst 9 Rotorblätter und später dann 50 Stück haben, was über eine For-Schleife realisiert werden soll. Leider wird bei mir die Schleife immer nur einmal durchlaufen und ich finde den Fehler einfach nicht. Wäre super wenn mir hier jemand helfen könnte.

Code:
clc
hold on, box on, grid on, axis equal

w = 0                       % Winkel

a = [6.5, 7.5, 7]           % Turm x-Werte
b = [0, 0, 10]              % Turm y-Werte
patch(a,b, 'b')             % Turm zeichnen    

c = linspace(0,2*pi);        % Kreisumfang
d = 0.5*cos(c)+7;            % Kreis
e = 0.5*sin(c)+10;           % Kreis
patch(d, e, 'k')            % Kreis zeichnen

f = [0, 6, 6]               % Rotorblatt x-Werte
g = [0, 0, 0.5]             % Rotorblatt y-Werte
%%patch(f,g,'r')              % Rotorblatt zeichnen liegend


for n=0:40:9
   
    h(n+1) = (n+1)/180 * pi   % Drehwinkel
    i = f*cos(h) - g*sin(h)      % Drehmatrix x-Werte
    j = f*sin(h) + g*cos(h)     % Drehmatrix y-Werte
    patch(i+7, j+10, 'r')

end
 
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

0:40:9 ist effektiv 0.
Von 0 aus wird in Schrittweite 40 losgegangen, die 40 wird aber schon beim ersten Schritt überschritten. Es bleibt also bei der 0.
Private Nachricht senden Benutzer-Profile anzeigen
 
spodec90
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2015, 16:18     Titel:
  Antworten mit Zitat      
Ich dachte 0:40:9 bedeutet, dass mein erstes n, n=0 ist. Das zweite dann n=40, das dritte 80, ... und das insgesamt 9 Schritte durchgeführt werden. Ich am Ende also bei 360 bin. Wie müsste es denn richtig heißen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.06.2015, 17:21     Titel:
  Antworten mit Zitat      
Hallo,

so ist es leider nicht. Im Zweifelsfall sollte die Doku Klarheit schaffen:
http://de.mathworks.com/help/matlab/ref/colon.html

Das gewünschte wäre:
Code:
oder
Code:
je nachdem ob die 360 im Vektor sein soll oder nicht.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.06.2015, 17:53     Titel:
  Antworten mit Zitat      
Vielen Dank soweit schon einmal.

Leider läuft es immer noch nicht. Ich bekomme in der Schleife bei i=... und j=.... die Fehlermeldung: "Matrix dimension must agree". Ich habe es auch mit ".*" probiert, dass hilft jedoch auch nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.06.2015, 18:02     Titel:
  Antworten mit Zitat      
Hallo,

dann schau dir doch mal die Variablen an, die an der Multiplikation beteiligt sind. f und g haben je drei Elemente, die Länge von h ändert sich in jeder Iteration.
Sinnvoller wäre wohl:
Code:
h = (n+1)/180 * pi


Im übrigen ist es gut, dass du den Code dokumentierst. Schön wäre jetzt noch, sinnvolle Variablennamen zu wählen. Das Alphabet abzuklappern halte ich jedenfalls keine gute Idee.

Im übrigen würde ich ein paar Strichpunkte empfehlen, um nicht das Command Window zuzuspammen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2015, 11:55     Titel:
  Antworten mit Zitat      
Super danke Harald. Da war ich ja gar nicht so weit weg von der richtigen Lösung Wink Bei meinem nächsten Projekt werde ich auf eine sinnvollere Zuweisung der Variablen Achten. Danke dafür!

Mein Code sieht jetzt so aus:
Code:
clc
hold on, box on, grid on, axis equal

a = [6.5, 7.5, 7]               % Turm x-Werte
b = [0, 0, 10]                   % Turm y-Werte
patch(a,b, 'b')                   % Turm zeichnen    

rad = 2                             % Nabenradius          
c = linspace(0,2*pi);          % Nabe Kreisumfang
d = rad*cos(c)+7;              % Nabe Kreis
e = rad*sin(c)+10;             % Nabe Kreis
patch(d, e, 'w')                   % Nabe zeichnen

f = [0, 6, 6]                     % Rotorblatt x-Werte
g = [0, 0, 0.5]                 % Rotorblatt y-Werte
%patch(f,g,'r')                 % Rotorblatt zeichnen liegend

l = 9                                % Anzahl Rotorblätter
k = 360/l                          % Faktor Anzahl Rotorblätter

for n=0:k:360
    h = n/180 * pi                 % Drehwinkel
    i = f*cos(h) - g*sin(h)     % Drehmatrix x-Werte
    j = f*sin(h) + g*cos(h)     % Drehmatrix y-Werte
    patch(i+7, j+10, 'r')          % Rotorblatt zeichnen
end


Jetzt sollen die Rotorblätter aber nicht an der Kreismitte ansetzen, sondern am Außenrand des Kreises. Das ganze natürlich so, dass bei Veränderung des Kreisdurchmessers und Anzahl der Rotorblätter alles weiterhin passt.

Ich habe versucht bei i=...*rad*sin(n) und bei j=... *rad*cos(n) einzufügen. Damit werden meine Rotorblätter aber nur Kreuz und Quer verschoben. Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich würde den Offset draufaddieren, nicht -multiplizieren.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2015, 17:05     Titel:
  Antworten mit Zitat      
Ich meinte eigentlich addieren. Habe nur irrtümlicherweise mal geschrieben.

Es sieht jetzt so aus. Das Ergebnis ist aber immer noch nicht richtig Confused Ich bekomme mit dem Zusatz bei i, und j auch immer ein zusätzliches Rotorblatt geplottet.

Code:
clc
hold on, box on, grid on, axis equal

a = [6.5, 7.5, 7]               % Turm x-Werte
b = [0, 0, 10]                  % Turm y-Werte
patch(a,b, 'b')                 % Turm zeichnen    

rad = 0.5                       % Nabenradius          
c = linspace(0,2*pi);           % Nabe Kreisumfang
d = rad*cos(c)+7;               % Nabe Kreis
e = rad*sin(c)+10;              % Nabe Kreis
patch(d, e, 'w')                % Nabe zeichnen

f = [0, 6, 6]                   % Rotorblatt x-Werte
g = [0, 0, 0.5]                 % Rotorblatt y-Werte
%patch(f,g,'r')                 % Rotorblatt zeichnen liegend

l = 4                          % Anzahl Rotorblätter
k = 360/l                       % Faktor Anzahl Rotorblätter

for n=0:k:360
    h = n/180 * pi                          % Drehwinkel
    i = (f*cos(h) - g*sin(h))+rad*sin(n)     % Drehmatrix x-Werte
    j = (f*sin(h) + g*cos(h))+rad*cos(n)     % Drehmatrix y-Werte
    patch(i+7, j+10, 'r')                      % Rotorblatt zeichnen
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.06.2015, 17:21     Titel:
  Antworten mit Zitat      
Hallo,

cos und sin waren vertauscht, und auch hier muss Gradmaß/Bogenmaß berücksichtigt werden.

Code:
...
    i = (f*cos(h) - g*sin(h)) +rad*cosd(n)     % Drehmatrix x-Werte
    j = (f*sin(h) + g*cos(h)) +rad*sind(n)     % Drehmatrix y-Werte
...


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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 13.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2015, 17:30     Titel:
  Antworten mit Zitat      
Genial! Es funktioniert! Vielen Dank dir! Very Happy
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.