How to create a 3D surface, then plot peaks at specific points on the 3D surface?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ethan Gros
el 8 de Jun. de 2015
Comentada: Star Strider
el 9 de Jun. de 2015
I want to plot a 3D surface that is 0 to 4 on the x-axis, 0 to 1 on y-axis and 0 on the z-axis (or some z if necessary like 0 to 1). Then I want to plot peaks on that surface, given the x, y, and z coordinates of the peak on the surface.
The data looks similar to:
if true
% Data (not code)
x y z
0.75 0.23 -2.86
0.75 0.47 3.87
0.75 0.64 2.78
2.45 0.23 4.56
2.45 0.47 0.89
2.45 0.64 2.74
3.23 0.23 2.10
3.23 0.47 -3.65
3.23 0.64 -5.89
Each row of the data is the x, y, and z coordinate of a specific peak on the 4 by 1 (0 to 4 on the x-axis, 0 to 1 on y-axis and 0 on the z-axis) surface.
The code that I am using now (written by Stephen Cobeldick ):
if true
close all
a=[0.75 0.23 -2.86
0.75 0.47 3.87
0.75 0.64 2.78
2.45 0.23 4.56
2.45 0.47 0.89
2.45 0.64 2.74
3.23 0.23 2.10
3.23 0.47 -3.65
3.23 0.64 -5.89]
x = reshape(a(:,1),3,3);
y = reshape(a(:,2),3,3);
z = reshape(a(:,3),3,3);
surf(x,y,z, 'FaceColor','interp')
end
This results in this:

This code sort of works in the sense that it shows the distortion of the data a crossed a surface, but it would be ideal to create a 4 by 1 (0 to 4 on the x-axis, 0 to 1 on y-axis and 0 on the z-axis) surface and then create specific peaks on that surface.
The end result that I am looking for is something that resembles this:

I would really appreciate any code that would help me to accomplish this goal.
Thank you
3 comentarios
Walter Roberson
el 8 de Jun. de 2015
So what do we do with the other post? Are you planning to mark the existing response there as Accepted?
Respuesta aceptada
Star Strider
el 8 de Jun. de 2015
I can’t get peaks from your data. This is the best possible without more data:
d = [0.75 0.23 -2.86
0.75 0.47 3.87
0.75 0.64 2.78
2.45 0.23 4.56
2.45 0.47 0.89
2.45 0.64 2.74
3.23 0.23 2.10
3.23 0.47 -3.65
3.23 0.64 -5.89]; % x = d(:,1), y = d(:,2), z = d(:,3)
xg = linspace(min(d(:,1)), max(d(:,1)), 25);
yg = linspace(min(d(:,2)), max(d(:,2)), 25);
[X,Y] = meshgrid(xg, yg);
F = scatteredInterpolant(d(:,1), d(:,2), d(:,3));
Z = F(X, Y);
figure(1)
meshc(X, Y, Z)
hold on
scatter3(d(:,1), d(:,2), d(:,3), 'Filled')
hold off
grid on
view([35 35])
and produces this plot:

4 comentarios
Más respuestas (0)
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!