how to pass from x y z plane to toroidal coordinate?

7 visualizzazioni (ultimi 30 giorni)
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 Commenti
Bjorn Gustavsson
Bjorn Gustavsson il 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?
Rabih Sokhen
Rabih Sokhen il 17 Nov 2022
Hy Bjorn
first thank you for your help.
i would like to know how to change x,y,z to ro, fi,theta in the toroidal coordiante
thanks

Accedi per commentare.

Risposte (1)

John D'Errico
John D'Errico il 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 Commenti
Rabih Sokhen
Rabih Sokhen il 17 Nov 2022
Hey John
  • You have a line in three dimensions as, and you want to find the equation of that line in a toroidal coordinate system?
--> Yes, exactly
  • what is the equation of a line?
--> I don't have a specific equation, we can use any coordinate in the x, y, z plane.
I have seen the following link, but I didn't really know how to make this transition since I don't have d1 and d2 as mentioned in the following link
thank you
Bjorn Gustavsson
Bjorn Gustavsson il 18 Nov 2022
Modificato: Bjorn Gustavsson il 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?

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by