Ваше второе изображение даст вам:
- Параметрические уравнения для x, y и z.
- Ограничение на
u
и v
У вас есть вся необходимая информация для создания вашей геометрии:
%plot the mesh
u=linspace(0,4*pi,50);
v=linspace(0,2*pi,50);
[u,v]=meshgrid(u,v);
x=(1.2+0.5*cos(v)).*cos(u);
y=(1.2+0.5*cos(v)).*sin(u);
z=0.5*sin(v)+u/pi;
surf(x,y,z)
hold on
%plot the 3d line
u = linspace(0,4*pi,40)
x=1.2.*cos(u);
y=1.2.*sin(u);
z=u/pi;
plot3(x,y,z,'r');
axis equal
Теперь вам просто нужно настроить параметрические уравнения для соответствия вашей линии.
РЕДАКТИРОВАТЬ: Чтобы применить то же решение для вашего конкретного случая, вам просто нужно заменить u
и v
на переменные theta
и R
в meshgrid
функция:
THETA_0 = 5; % constant
THETA_1 = 10.3; % starting angle
A = 3.762;
B = 0.001317;
C = 7.967;
D = 0.1287;
E = 0.003056;
s=2;
% Calculate (x,y,z) coordinates of points defining the spiral path
theta = THETA_1:5:910.3;
for i = 1:length(theta)
if (theta(i)<=99.9)
R(i) = s*C*(1-D*log(theta(i)-THETA_0));
else
R(i) = s*A*exp(-B*theta(i));
end
end
x = R.*cosd(theta);
y = R.*sind(theta);
z = E.*(theta-THETA_1);
plot3(x,y,z,'r','linewidth',2)
hold on
[u,v]=meshgrid(theta,R);
x=(R+0.5*cos(v)).*cosd(u);
y=(R+0.5*cos(v)).*sind(u);
z=0.5*sin(v)+E.*(u-THETA_1);
mesh(x,y,z,'facecolor','none')
axis equal
Результат:
кстати, я небольшой поклонник смешивания cosd
и cos
в одном скрипте, но делайте что хотите.