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

Röhre um Schraubenlinie legen

 

Gonzoph
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 28.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 14:58     Titel: Röhre um Schraubenlinie legen
  Antworten mit Zitat      
Hallo zusammen,

ich habe riesen Probleme bei einer Aufgabe. Generell habe ich verstanden was ich brauche und wie es aussehen müsste, aber ich scheitere auf Grund meiner geringen MatLab-kenntnisse einfach an der Umsetzung.
Ich soll um eine Schraubenkurve eine Röhre legen. Die Gestamtsteigung der Schraubenkurve ist 0,6 und sie geht einmal rum, also 2*Pi. Die Steigung der Kurve ist 0,2.

Soweit so gut, ich habe die Oberfläche der Röhre um die Kurve mit Radis 0,1 gegeben mit:

r(t,sigma)=phi B(t)*sind(sigma)-N(t)*cos(sigma))+k(t)

r(t,sigma): Ortvektor der Fläche
k(t): Ortsvektor der Raumkurve
B(t): Binormalenvektor von k(t)
N(t): Normalenvektor von k(t)

Die Kurve in Matlab darzustellen ist nicht das Problem. Ich hab es wie in einem anderen alten Beitrag hier im Forum auch geschafft viele Kreise um die Kurve zu Plotten. Das scheint mir aber nicht der richtige Weg zu sein.

Muss ich nicht irgendwie ein Meshgrid erzeugen und dann surf nutzen um die Oberfläche darzustellen? Ich hoffe ihr könnt mir weiter helfen. Hier mal was ich bislang habe und was auch auf jeden Fall brauchbar ist.
Ob mein Binormalenvektor und der Normalenvektor richtig ist weiß ich nicht. Deshalb lass ich sie mal raus. Über eine Art kochrezept für mein Problem wäre ich auch sehr erfreut.

Code:
axis equal;
a=1;
h=a/5;
roh=a/10;


t = [0:0.01:1];                                                             % die 3 wegen 3*h. h für das Dreibein in reinform benötigt
                                                                   
x=a*cos(2*pi*t);                                                         % Beschreibt die Kurvenfunktion in Parameterform  
y=a*sin(2*pi*t);
z=3*h*t;

plot3(x,y,z)                                                               % Zeichnet die obere Kurve in den entsprechenden Koordinaten                                          
grid on


Entsprechend dazu nochmal der Code aus dem älteren Forenbeitrag, welcher nur die Kreise zeichnet. Bei surf scheint irgendwas nicht zu stimmen und das Programm steigt aus.

Code:
axis equal;
a=1;
h=a/5;
roh=a/10;
t1 = 0;

t = [0:0.01:1];                                                             % die 3 wegen 3*h. h für das Dreibein in reinform benötigt
                                                                   
x=a*cos(2*pi*t);                                                         % Beschreibt die Kurvenfunktion in Parameterform  
y=a*sin(2*pi*t);
z=3*h*t;

plot3(x,y,z)                                                               % Zeichnet die obere Kurve in den entsprechenden Koordinaten                                          
grid on
hold on
while (t1<=1)
k = [a*cos(2*pi*t1);a*sin(2*pi*t1);3*h*t1];                                            % Funtion die die Raumkurven beschreibt
b = [-6*pi*a*sin(2*pi*t1);6*pi*a*cos(2*pi*t1);3*h];                                              % 1. Ableitung nach t
c = [-36*pi*a*cos(2*pi*t1);-36*pi*a*sin(2*pi*t1);0];                                             % 2. Ableitung nach t
b_betrag = sqrt(dot(b,b));                                                 % Betrag des Vektors a'
T = b/b_betrag;                                                            % Tangenteneinheitsvektor
B1 = cross(b,c);                                                           % Kreuzprodukt der Vektoren (b und c)
B1_betrag = sqrt(dot(B1,B1));
B = B1/B1_betrag;                                                          % Binormaleneinheitsvektor
N = cross(B,T);  
t1=t1 + 0.01;
M = repmat(k, 1, n);

R = roh*(B * sin(phi) - N * cos(phi)) + M;
plot3(R(1,:),R(2,:),R(3,:))
end
t3 = [0:0.01:1];
phi2 = [0:(2*pi)/100:2*pi];
R = sqrt(a^2 + h^2);
r =  [a*cos(2*pi*t3);a*sin(2*pi*t3);h*t3];;
B2 = (1/R)*[h*sin(2*pi*t3);-h*cos(2*pi*t3);h*t3];
N2 = (1/R)*[-cos(2*pi*t3);-sin(2*pi*t3);0*t3];
sin2 = sin(phi2)
cos2 = cos(phi2)
j2 = 1

while (j2 <= 101)
R2(:,j2) = roh * (B2(:,j2)*sin2(j2) - N2(:,j2)*cos2(j2)) + r(:,j2);
j2 = j2 + 1;
end

x_int=linspace(-2,2,100);
y_int=x_int;
y_int=y_int(:);
[R1,R2,R3]=griddata(R2(1,:),R2(2,:),R2(3,:),x_int,y_int,'cubic');
figure;
surf(R1,R2,R3);
end


Bin für jede Hilfe dankbar!
Private Nachricht senden Benutzer-Profile anzeigen


Gonzoph
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 28.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2014, 19:01     Titel:
  Antworten mit Zitat      
Code:
axis equal;
a=1;
h=a/5;
roh=a/10;
t1 = 0;

t = [0:0.01:1];                                                             % die 3 wegen 3*h. h für das Dreibein in reinform benötigt
                                                                   
x=a*cos(2*pi*t);                                                         % Beschreibt die Kurvenfunktion in Parameterform  
y=a*sin(2*pi*t);
z=3*h*t;
sigma = [0:pi/10:2*pi];
[m,n] = size(sigma);
M = zeros(3, n);
plot3(x,y,z)                                                               % Zeichnet die obere Kurve in den entsprechenden Koordinaten                                          
grid on
hold on
while (t1<=1)
k = [a*cos(2*pi*t1);a*sin(2*pi*t1);3*h*t1];                                            % Funtion die die Raumkurven beschreibt
b = [-6*pi*a*sin(2*pi*t1);6*pi*a*cos(2*pi*t1);3*h];                                              % 1. Ableitung nach t
c = [-36*pi*a*cos(2*pi*t1);-36*pi*a*sin(2*pi*t1);0];                                             % 2. Ableitung nach t
b_betrag = sqrt(dot(b,b));                                                 % Betrag des Vektors a'
T = b/b_betrag;                                                            % Tangenteneinheitsvektor
B1 = cross(b,c);                                                           % Kreuzprodukt der Vektoren (b und c)
B1_betrag = sqrt(dot(B1,B1));
B = B1/B1_betrag;                                                          % Binormaleneinheitsvektor
N = cross(B,T);  
t1=t1 + 0.01;
k = repmat(k, 1, n);
R = roh*(B * sin(sigma) - N * cos(sigma)) + k;
plot3(R(1,:),R(2,:),R(3,:))
end

 


das ist die neuste version. Hier werden die Kreise erzeugt.
Wie komme ich dort jetzt mit meshgrid und surf weiter?

R = roh*(B * sin(sigma) - N * cos(sigma)) + k;

Das brauche ich auf jeden Fall in Parameterform oder? Wie komme ich da hin?

Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Schwalla
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 14.07.16
Wohnort: Hannover
Version: ---
     Beitrag Verfasst am: 22.12.2017, 11:19     Titel:
  Antworten mit Zitat      
Hallo,
hast du dein Problem mittlerweile lösen können?
Habe eine ähnliche Problemstellung....

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Student11235

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2019, 18:13     Titel:
  Antworten mit Zitat      
Hallo Sportsfreunde,

wir gehören ebenfalls zu dem erlesenen Kreise jener Studenten mit der hier gesuchten Problemstellung... es hat uns Zeit und Nerven gekostet. Dennoch haben wir uns geschworen: Wenn wir es schaffen, wollen wir einen Beitrag leisten und hier mit euch teilen...

Auf das es vielen helfen möge Smile

Code:
%Röhre um eine Schraubenkurve
clear all;
clc;
close all;

%Variablendeklaration
syms k;     %Ortsvektor Raumkurve k(t) -> Schraubenkurve (Helix)
syms r;     %Ortsvektor Fläche r(t, theta) -> Röhre um Schraubenkurve
syms B;     %Binormalenvektor von k(t)
syms N;     %Normalenvektor von k(t)
syms Tv;    %Tangentenvektor von k(t)

syms a;     %Radius der Schraubenkruve
syms g;     %Ganghöhe der Schraubenkurve
syms h;     %Steigung der Schraubenkurve
syms rho;   %Radius der Röhre

syms t;     %Winkel der Raumkurve (2*pi = eine durchlaufene Windung)
syms theta; %Winkel der Röhre (2*pi = geschlossene Röhre)        

%Ortsvektor Schraubenkurve k(t)
k =[a*cos(t);a*sin(t);h*t];
k1=[diff(k(1),t);diff(k(2),t);diff(k(3),t)];
k2=[diff(k1(1),t);diff(k1(2),t);diff(k1(3),t)];

%Tangentenvektor Tv, Normalenvektor N, Binormalenvektor B von k(t)
Tv= simplify(k1);      
N = simplify(k2);          
B = simplify(cross(Tv,N));            

%Ortsvektor Fläche (Röhre) r(t, theta)
r = simplify(rho.*(B.*sin(theta)-N.*cos(theta))+k);

%Variablendeklaration
a = 1;                      %Radius der Schraubenkruve
g = a/3;                    %Ganghöhe der Schraubenkurve
h = g/(2*pi*a);             %Steigung der Schraubenkurve
rho = a/10;                 %Radius der Röhre
t = linspace(0,3*2*pi,360); %Winkel der Raumkurve
                            %Anzahl der durchlaufenen Windungen = 3
                            %um die Gesamtsteigung 3h zu erreichen
theta = linspace(0,2*pi,36);%Winkel der Röhre

%Parameterdarstellung des Ortsvektors der Schraubenkurve k(t)
kx = a*cos(t);
ky = a*sin(t);
kz = h*t;

%Plotten der Schraubenkurve
plot3(kx, ky, kz, 'r','linewidth', 3);
axis equal
grid on
hold on
xlabel('x-Achse'); ylabel('y-Achse'); zlabel('z-Achse');  title('Schraubenkurve (Helix)');

%Plotten eines begleitenden Dreibeins
% quiver3(kx(360),ky(360),kz(360),-a*cos(6*pi),-a*sin(6*pi),0,'linewidth', 2)        %Normalenvektor  = blau
% quiver3(kx(360),ky(360),kz(360),-a*sin(6*pi),a*cos(6*pi),h,'k','linewidth', 2)     %Tangentenvektor = schwarz
% quiver3(kx(360),ky(360),kz(360),a*h*sin(6*pi),-a*h*cos(6*pi),a^2,'linewidth', 2)   %Binormalenvektor= gelb
% legend('Schraubenkurve', 'Normalenvektor', 'Tangentenvektor', 'Binormalenvektor','Location','South')

%Gitterpunkte aus Definitionsbereich t und theta erstellen
[T,Theta]=meshgrid(t, theta);

%Parameterdarstellung des Ortsvektors der Röhre r(t,theta)
rx = rho.*(h.*a.*sin(T).*sin(Theta)+a.*cos(T).*cos(Theta))+a.*cos(T);
ry = rho.*(-h.*a.*cos(T).*sin(Theta)+a.*sin(T).*cos(Theta))+a.*sin(T);
rz = rho.*(a.^2*sin(Theta))+h.*T;

%Plotten der Fläche (Röhre)
surf(rx,ry,rz);
axis equal
grid on
hold on
xlabel('x-Achse'); ylabel('y-Achse'); zlabel('z-Achse');  title('Rutsche');
c = colorbar;
c.Label.String = 'z-Wert (Höhenangabe)';
 
 
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.