how to pass from x y z plane to toroidal coordinate?
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hey guys,
I am trying to make the transition from x, y, z coordinate to toroidal coordinate.
I tried to write the following code but I didn't achieve to do correctly the transition.
Any idea how to fix fix
Thank you in advance
Code:
clear all
clc
subplot 121
% suppose we have a line in the x,y,z plane
x=linspace(-1,1,10)
y=linspace(-2,2,10)
z=linspace(-3,3,10)
plot3(x,y,z)
grid on
subplot 122
% first creat torous
r_i = 1; % inner radius
r_o = 3; % outer radius
theta = linspace(-pi,pi,20);
phi = linspace(0*pi,2*pi,20);
[thetaa,phii] = meshgrid(phi,theta);
xx = (r_o + r_i.*cos(phii)).*cos(thetaa);
yy = (r_o + r_i.*cos(phii)).*sin(thetaa);
zz = r_i.*sin(phii);
surf(xx,yy,zz,'Facealpha',0,'Edgealpha',0.3);
hold on
% second do the transformation from x,y,z plane to the Toroidal Coordinates
R=(r_i+r_o)/2
f=atan(y./x) %azimuthal angle
r=sqrt( (sqrt(x.^2+y.^2)-R).^2+z.^2) %
t=atan(z./(sqrt(x.^2+y.^2)-R))
plot3(r,t,f,'MarkerSize',50)
2 commentaires
Bjorn Gustavsson
le 17 Nov 2022
It is not at all clear how you want to transform that line to your torus-surface. I know how to map the coordinates of the x-y plane (or the complex plane if you want) to a spherical surface:
theta = linspace(0*pi,pi,19);
phi = linspace(-pi,pi,25);
[phii,thetaa] = meshgrid(phi,theta);
r_i = 1;
xx = r_i.*cos(phii).*cos(thetaa);
yy = r_i.*cos(phii).*sin(thetaa);
zz = r_i+r_i.*sin(phii);
surf(xx,yy,zz,'Facealpha',0.2,'Edgealpha',0.3);
hold on
x=linspace(-1,1,10);
y=linspace(-1,1,10)+1;
phi_l = atan2(x,y);
theta_l = atan((x.^2+y.^2).^.5/(2*r_i));
plot(x,y,'g')
plot3(r_i*sin(phi_l).*sin(2*theta_l),r_i*cos(phi_l).*sin(2*theta_l),r_i-r_i*cos(2*theta_l),'g','linewidth',2)
azV = -157.04;
elV = 34;
view(azV,elV-5)
You might have to make a more explicit explanation. Perhaps it becomes easier if you plot both line and torus-surface in the same axes?
Réponses (1)
John D'Errico
le 17 Nov 2022
You have a line in three dimensionas, and you want to find the equation of that line in a toroidal coordinate system?
First, what is the equation of a line? Most simply, I would do it parametrically. Perhaps like this, using vectors X0 and DX, as
X = X0 + DX*t
In terms of coordinates x,y, and z, you might write:
x = x0 + dx*t
y = z0 + dz*t
z = z0 + dz*t
In this link, we see some explanation of a toroidal coordinate system.
In fact, that link even gives a conversion to the toroidal coordinate system from Cartesian coordiantes, (x,y,z).
2 commentaires
Bjorn Gustavsson
le 18 Nov 2022
Modifié(e) : Bjorn Gustavsson
le 18 Nov 2022
It should be as simple as stepping through the section Inverse_transformation, there you can take equation by equation to calculate the phi, but you'd use atan2, rho and tau from your x, y, and z points without much problems.
@John D'Errico: It never before occurred to me to move away from the torus-surface - so I learnt something today too. Now I wonder if this principle of moving away extends to other pastry-shaped things?
Voir également
Catégories
En savoir plus sur Motion Modeling and Coordinate Systems dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!