Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Application Engineer (m/w)
Unterstützung des Vertriebs bei der Erstellung von Angeboten und Präsentation beim Kunden
Control Techniques GmbH - Hennef

Ingenieur für Prüfstandssysteme und HiL-Testing (m/w)
Konzeptionierung neuer Hardware-in-the-Loop (HiL) Prüfstandssysteme
GIGATRONIK Köln GmbH - Köln

Entwicklungsingenieur (m/w) Nachrichtentechnik und Signalverarbeitung
Design und Gestaltung von effizienten Algorithmen für FPGAs für SoCs
Diehl Defence GmbH & Co. KG - Röthenbach a.d. Pegnitz / Metropolregion Nürnberg

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Helixabschnitte drehen und verknüpfen

 

Tino97
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 21.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2017, 15:48     Titel: Helixabschnitte drehen und verknüpfen
  Antworten mit Zitat      
Hallo,

ich habe die Koordinatenpunkte für einen offenen Helix, d.h. Startpunkt und Endpunkt liegen nicht aufeinander. Diesen Helix möchte ich nun mehrfach (turns) um einen Winkel drehen, so dass der zweite Winkel am Ende des ersten wieder anknüpft, dritte am zweiten, vierte am dritten usw..

Ich habe mir dafür den unten aufgeführten Code geschrieben, wo die Koordinaten erst aus einer txt ausgelesen, über eine Rotationsmatrix gedreht und am Ende in zusammengeführt werden, um alles vollständig plotten zu können.

Der Winkel bzw. die Schrittweite, mit der die Drehung durchgeführt wird, soll(te) sich durch skip/turns ergeben.

Als ich das Programm durchlaufen lies, wurde jedoch ein Fehler sichtbar, der sich anscheinend beim Übergang von einem Helixende zum nächsten Helixanfang ergibt.

Wenn ich nur zwei Helixabschnitte ist die gerade Verbindung deutlich zu erkennen.

Bisher konnte ich die genaue Ursache nicht herausfinden aber ich vermute, dass es an Winkel= .. liegen könnte. (Oder ich habe bei der Transformation der Koordinaten einen Denkfehler gemacht.)

Weiß jemand vielleicht was ich übersehen habe?

Code:
%[filename, pathname] = uigetfile('*.txt', 'Pfaddatei aufrufen');
%Pfaddatei = fopen([pathname filename],'rt');
Pfaddatei = fopen('helix.txt');

HKoord = textscan(Pfaddatei, '%f %f %f %f', 'HeaderLines',1);   %Einlesen der Koordinaten ab Zeile 2
HSpalten = cell2mat(HKoord);
Pnt = HSpalten(:,1);
xp = HSpalten(:,2)';                               %x
yp = HSpalten(:,3)';                               %y
zp = HSpalten(:,4)';                                %z

%% Plotten des Pfads

turns=46;  % Anzahl Drehungen
skip=41  % Sprünge
P=[xp; yp; zp];                       % Matrix mit xyz-Koordinaten
l=length(xp);                         % Anzahl der Koord.Punkte
anzPunkte=length(xp)*turns                % Anzahl aller Punkte
%for w=1:turns;  % Vollständiger Durchlauf
for w=2;     % Textlauf, mit nur 2 Drehungen
    Winkel=skip/turns*2*pi*(w-1);
    % Rx = [1,0,0;0,cos(Winkel),-sin(Winkel);0,sin(Winkel),cos(Winkel)];   % Rotationsmatrix Rx
    % Ry = [cos(Winkel),0,sin(Winkel);0,1,0;-sin(Winkel),0,cos(Winkel)];   % Rotationsmatrix Ry
    Rz = [cos(Winkel),-sin(Winkel),0;sin(Winkel),cos(Winkel),0;0,0,1];    % Rotationsmatrix Rz
   
    for k=1:l;          % Koordinaten der gedrehten Helixabschnitte
        E=Rz*P(:,k);
        xi(k)=E(1);
        yi(k)=E(2);
        zi(k)=E(3);
    end
    % Koordinaten der Helixabschnitte zusammensetzen zu vollständigen Pfad
    Ci=1+anzPunkte/turns*(w-1):anzPunkte/turns*w;
    xx(Ci,1)=xi;
    yy(Ci,1)=yi;
    zz(Ci,1)=zi;
   
end

plot3(zz,xx,yy)                          % Plot
hold on
%plot3(zz(1),xx(1),yy(1),'*')             % Startpunkt anzeigen
hold on
plot3(zz(end),xx(end),yy(end),'+');      % Endpunkt anzeigen
axis equal
 

Gruß
Tino

probe.m
 Beschreibung:
Code

Download
 Dateiname:  probe.m
 Dateigröße:  1.63 KB
 Heruntergeladen:  8 mal
helix.txt
 Beschreibung:
Koordinaten

Download
 Dateiname:  helix.txt
 Dateigröße:  5.5 KB
 Heruntergeladen:  7 mal
Private Nachricht senden Benutzer-Profile anzeigen


Tino97
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 21.06.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2017, 19:48     Titel:
  Antworten mit Zitat      
Habe den Fehler gefunden. Shocked

Damit klappt es:

Code:
Winkel=-skip/turns*2*pi*(w-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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.