Matlab: Kegel/Pfeil in 3D

Kegel/Pfeil in 3D

(English) Um einen Kegel bzw. ein Pfeil im 3D darzustellen kann die Funktion:

function arrow3D(x,y,z,x2,y2,z2,length,thick,color)

 verwendet werden. Dabei ist "x2,y2,z2" der Endwert der Pfeiles, also die Spitze und "x,y,z" der Anfang des Vektors bzw. des Pfeiles. "length" gibt die Länge des Pfeils an und "thick" die Dicke. Mit "color" kann der Pfeil gefärbt werden. Wie die Funktion angewendet wird, kann im vorherigen Post nachgelesen werden.


Hier der Quellcode:


function arrow3D(x,y,z,x2,y2,z2,length,thick,color)

if nargin<5
    scale = 1;
end
x=-x;
y=-y;
x2=-x2;
y2=-y2;

vector2=[x2;y2;z2];
vector1=[x;y;z];
vector21=[x2-x;y2-y;z2-z];

u1=[x2-x;y2-y;z2-z];
u1=1/norm(u1)*u1;
u2=[1;0;0];
val=u1(1,1);
abstand=u1-val*u2;
if abstand==zeros(3,1)
    u2=[0;1;0];
end;
%Kreuzprodukt
u3(1,1)=u1(2,1)*u2(3,1)-u1(3,1)*u2(2,1);
u3(2,1)=u1(3,1)*u2(1,1)-u1(1,1)*u2(3,1);
u3(3,1)=u1(1,1)*u2(2,1)-u1(2,1)*u2(1,1);
u3=1/norm(u3)*u3;
%
u2(1,1)=u1(2,1)*u3(3,1)-u1(3,1)*u3(2,1);
u2(2,1)=u1(3,1)*u3(1,1)-u1(1,1)*u3(3,1);
u2(3,1)=u1(1,1)*u3(2,1)-u1(2,1)*u3(1,1);
u2=1/norm(u2)*u2;
%orthnormale vektoren
v1=u2;
v2=u3;
step=pi/50;
a = [step:step:2*pi];
er=vector2;
Er=repmat(er,1,numel(a));
zerx=(Er(1,:))';
zery=(Er(2,:))';
zerz=(Er(3,:))';

vectorscale=(1-length)*vector21;
grund=(v1*sin(a)+v2*cos(a))*norm(vector2'-vector1')/3*thick;
VS=repmat(vectorscale+vector1,1,numel(a));
grund=grund+VS;

xspitz=[zerx';grund(1,:)];
yspitz=[zery';grund(2,:)];
zspitz=[zerz';grund(3,:)];

xrep=reshape(xspitz,1,2*numel(a))';
yrep=reshape(yspitz,1,2*numel(a))';
zrep=reshape(zspitz,1,2*numel(a))';

%hold on;
%view(3);
plot3(xrep,yrep,zrep,'Color',color);




Kommentare

Beliebte Posts aus diesem Blog

Matlab: Polarplot Achsenbeschriftungs- und Skalierfunktion

Matlab: GUI Interface

Matlab: 3D Plot in kartesischem Koordinatensystem