MATLAB Answers

0

how to convert a 3-d binary array of spherical cordinates into floating type array of cartesian cordinates

Asked by VANDANA GUPTA on 16 Oct 2019
Latest activity Commented on by Rik
on 25 Oct 2019
I have matlab data ("vand_sph61-11.mat") which i linked here. this data has spherical cordinates in binary form and has 3-d array. this data has 1801x59x109 size. 1801 is range by getting from dividing 5 meter to 50 meter into 2.5 cm. 59 is transmitter beams by getting from dividing -29 degree to 29 degree into 1 degree. 109 is receiver beams by getting from dividing -54 degree to 54 degree into 1 degree. I want to convert this data into cartesian cordinates which has floating type.
In this data, i created a 3-d object in which when point exist then have binary value '1' otherwise have binary value '0'.
please help me

  2 Comments

So you want to find the indices in your 3D array and convert those indices to the values of the three vectors you describe?

Sign in to comment.

1 Answer

Answer by Rik
on 16 Oct 2019
 Accepted Answer

If you get my findND function from the FEX you can do this:
%find 3D indices in M
[r,c,p]=findND(M);
%create lookup tables
lookup=struct;
lookup.r=5:.025:50;
lookup.c=-29:29;
lookup.p=-54:54;
%convert indices to physical dimensions
r=lookup.r(r);
c=lookup.c(c);
p=lookup.p(p);

  8 Comments

fv=isosurface(M,0.5);
patch('Faces',fv.faces,'Vertices',fv.vertices,'FaceColor','b')
That way you don't even need findND. What you need to do is a way to find out how to convert the coordinate system of M (which is stored in the three columns of fv.vertices) to the coordinates you want your output to use.
Note that isosurface can take a long time and may generate a complex shape with too many polygons.
'it is not working' does not provide any useful information. As I said in my comment these two lines of code are not enough to get your desired output. So what code did you try?

Sign in to comment.