How to create a 3D surface, then plot peaks at specific points on the 3D surface?

조회 수: 3 (최근 30일)
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
Ethan Gros
Ethan Gros 2015년 6월 8일
편집: Ethan Gros 2015년 6월 8일
Yeah I wrote that post. I re-posted this question with more clarification. The answer given on that post was not exactly what I was looking for.
Walter Roberson
Walter Roberson 2015년 6월 8일
So what do we do with the other post? Are you planning to mark the existing response there as Accepted?

댓글을 달려면 로그인하십시오.

채택된 답변

Star Strider
Star Strider 2015년 6월 8일
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
Ethan Gros
Ethan Gros 2015년 6월 9일
if true
% Code from another forum not sure the author
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
0 0 0
4 0 0
4 1 0
0 1 0]
figure1 = figure;
x= a(:,1);
y=a(:,2);
z=a(:,3);
dx=0.05;
dy=0.05;
x_edge=[floor(min(x)):dx:ceil(max(x))];
y_edge=[floor(min(y)):dy:ceil(max(y))];
[X,Y]=meshgrid(x_edge,y_edge);
Z=griddata(x,y,z,X,Y);
surf(X,Y,Z)
I just added the corners of the flat surface as four additional points and it created a base line for the data to correlate to creating peaks at the points of the data. Thank you for all the help.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Descriptive Statistics에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by