How to convert a series of x,y,z points to the appropriate format for isosurface?
7 views (last 30 days)
Show older comments
Hello,
I have a series of points X,Y,Z and I need to plot the isosurface describing these points.
The number of uniques X values is not equal to the unique numbers of the Y values.
Not sure how to produce the X abd Y vexros an the coirresponding Z vector.
Thak you
1 Comment
Star Strider
on 13 Sep 2024
You need to calculate a ‘V’ vector from the existing 3 vectors data to use the isosurface function. The vectors need to have the same dimensions. Functions such as scatteredInterpolant (that you can use in this instance) will deal with and correct duplicate values.
Accepted Answer
TED MOSBY
on 20 Sep 2024
Edited: TED MOSBY
on 20 Sep 2024
To plot an isosurface from a series of points with coordinates (X), (Y), and (Z), you need to have your data on a structured grid. If your data isn't structured you'll first need to interpolate it onto a grid before you can use functions like "isosurface" in MATLAB.
Prepare the Grid:
- Create a grid that covers the range of your 'X', 'Y', and 'Z' data.
- Use "meshgrid" to generate a grid for interpolation.
Interpolate Data:
- Use "scatteredInterpolant" or "griddata" to interpolate your scattered data onto the grid.
Plot the Isosurface:
- Use the "isosurface" function to plot the interpolated data.
I wrote a sample MATLAB code to illustrate the process:
% Sample data (replace these with your actual data)
X = rand(1000, 1) * 10; % Example X values
Y = rand(1000, 1) * 10; % Example Y values
Z = rand(1000, 1) * 10; % Example Z values
V = sin(X) + cos(Y) + Z; % Example scalar field
% Define grid range and resolution
xlin = linspace(min(X), max(X), 50); % Define the grid in X direction
ylin = linspace(min(Y), max(Y), 50); % Define the grid in Y direction
zlin = linspace(min(Z), max(Z), 50); % Define the grid in Z direction
% Create a meshgrid for interpolation
[Xgrid, Ygrid, Zgrid] = meshgrid(xlin, ylin, zlin);
% Interpolate the scattered data onto the grid
F = scatteredInterpolant(X, Y, Z, V, 'linear', 'none');
Vgrid = F(Xgrid, Ygrid, Zgrid);
% Choose an isovalue for the isosurface
isovalue = 0.5;
% Plot the isosurface
figure;
isosurface(Xgrid, Ygrid, Zgrid, Vgrid, isovalue);
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Isosurface Plot');
axis equal;
grid on;
Refer to these documentations for MATLAB functions.
More Answers (0)
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!