Verfasst am: 07.10.2017, 15:48
Titel: Helixabschnitte drehen und verknüpfen
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.)
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;
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
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
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.