Conversion from Cartesian X,Y,Z to domain-centric cylindrical coordinates

3 views (last 30 days)
I just have a question on the conversion from Cartesian X,Y,Z to domain-centric cylindrical coordinates. I have a computed variable, an energy flux term, say F.
Currently, F is a function of x,y,z. Here, the x,y,and z are not lat-Lon values but are more like indices. For example, the grid has 480 grids in the X and Y direction with a spacing of 1km each. So I simply define X as 1000 to 480,000 in increments of 1000 (meters). Y and X are the same since the grid is uniform. I use actual Z values which are non-uniform.
What I’d like to do is to transform this variable, F into r,theta,z coordinates with reference to the domain center. What is the best way to do this in Matlab?
  4 Comments
Sindar
Sindar on 24 Jan 2020
Edited: Sindar on 24 Jan 2020
An algorithm:
  • generate a cylindrical grid (decide whether you want r_max to include all xyz points, or to exclude any unknown points, or somewhere between)
  • transform this grid into Cartesian (x2=r*cos(theta), etc.)
  • interpolate F from your original grid to the new Cartesian grid (interp3)
  • you now have F2 at your new cylindrical grid
saipb
saipb on 24 Jan 2020
Thank you, while your algorithm will work, I am looking for a methodology that involves the least amount of interpolation. Is it possible to transform the current dataset (x,y,z) to corresponding values of r and theta - the sense of the radius should be outward from the domain center and the sense of theta must be anticlockwise about that center (Starting from theta = 0 at the East, Increasing Y - Decreasing X - Decreasing Y - Increasing X). So that each X,Y,Z has a corresponding r,theta,z and then I find a way to plot the slices or isosurfaces?

Sign in to comment.

Accepted Answer

Sindar
Sindar on 24 Jan 2020
Edited: Sindar on 24 Jan 2020
% example data
X = 1000:1000:480000;
Y = X;
Z = sort(rand(size(X)));
Domain_Center = [mean(X([1 end])) mean(Y([1 end])) mean(Z([1 end]))]
% compute Cylindrical coordinates
[theta,rho,z] = cart2pol(X-Domain_Center(1),Y-Domain_Center(2),Z - Domain_Center(3));
% F = F
  5 Comments
saipb
saipb on 24 Jan 2020
Thank you very much. https://www.mathworks.com/help/matlab/ref/cart2pol.html informs me that the algorithm assumes that the origin is the center. Looks like by incorporating X-x(center) and Y - y(center), we solve this issue. Finally, 1. Where can I look at the algorithm for cart2pol that you mention in your comment? 2. At present, I use a combination of slice and isosurface to generate a 3D plot of F as a function of x,y,z. Once I convert to r,theta,z - is it possible to use slices and isosurfaces even then or are there other options?
Sindar
Sindar on 24 Jan 2020
slices and isosurfaces will treat your r,theta,z coordinates exactly like cartesian ones. For instance, visually, the slices will still be planes but they will be slices along r instead of x, etc.. I'd just try first and see what happens.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!