how to display three one dimensional vectors as a 2 dimensional image
4 views (last 30 days)
Show older comments
Hi, This should be simple. I think there must be a very easy way to do this but I cannot figure it out.
I have data for the angle of a beam in theta and phi and the intensity of that beam. I want to plot it on a polar plot, so I can see the intensity of beams coming from different directions. I can use polar to plot this once I have a 2D array of intensities. But before that I must convert the data for beam intensities from a random array of [theta,phi,I] where theat, and phi, and I are all one dimensional vectors, onto some regular spaced grid. When I try meshgrid I get the error that theta or phi are not monotonically increasing. What can I do?
Thanks!
0 Comments
Answers (1)
Robert
on 12 Jul 2016
To create a mesh from your data, you could use delaunay and trisurf, which don't need the x and y values to be evenly spaced. Below is an example that should help get you started. In the conversion to Cartesian, you can scale by I to map intensity to position, or leave it out and visualize intensity with color only.
I hope I interpreted your question correctly. At the very least this script makes cool looking plots!
n = 1000; % number of samples
% Example data
theta = rand(n,1)*360;
phi = rand(n,1)*180 - 90;
I = rand(n,1)+4+2*sind(theta).^2;
% Convert to Cartesian
X = cosd(theta).*sind(phi);
Y = sind(theta).*sind(phi);
Z = cosd(phi);
% X = I.*cosd(theta).*sind(phi);
% Y = I.*sind(theta).*sind(phi);
% Z = I.*cosd(phi);
% Create and show a triangle mesh from points
tri = delaunay(X,Y);
trisurf(tri,X,Y,Z,I);
axis equal
rotate3d on
view(2) % show the 2D (XY) view
0 Comments
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!