MATLAB Answers

Yu Zou

How to transfer surf(x,y,z) to a data contains height value?

Asked by Yu Zou
on 18 Jan 2018
Latest activity Answered by Walter Roberson
on 19 Jan 2018
Greeting everyone!
What i have now is 3 Matrix x,y,z, which can be presented by surf(x,y,z).
But i want to transfer these data to one matrix containing height value, which can be presented by surf(f).
Here is my data:
[x,y,z] = sphere; % Makes a 21-by-21 point sphere
x = x(11:end,:); % Keep top 11 x points
y = y(11:end,:); % Keep top 11 y points
z = z(11:end,:); % Keep top 11 z points
r = 3; % r radius value
y=r*y+r; % Move x, y starting from 0
z=r*z; % Change the radius of the dom to r
% so i generate a dom(half ball) with radius 3


surf(f) is the same as surf(1:size(f,1), 1:size(f,2), f) so the only way to get this to work would be to interpolate or extrapolate values at unit intervals so that the tick labels line up with the data values.
This would not seem to be a useful thing to do. If you have the coordinates of the data points available, then use them.
thanks for advice. I want to extract the height from a dom so that i can execute something else, so it's pretty useful for me.

Sign in to comment.

2 Answers

Answer by Image Analyst
on 18 Jan 2018

Try interp2() to take your coordinates and make a 2-D matrix where the values are the z values.


it shows error as below: Error using interp2>makegriddedinterp (line 239) Input grid is not a valid MESHGRID.
Error in interp2 (line 138) F = makegriddedinterp(X, Y, V, method,extrap);
I guess it's because what i want to interpolate is a dom, which doesn't have value in the corners. Do you have any solution?
Not sure since I don't have any data to try. You forgot to attach your data. Make it easy for people to help you, not hard, by attaching your data.
Thanks for advice, i've attached my code

Sign in to comment.

Answer by Walter Roberson
on 19 Jan 2018

F = scatteredInterpolant(x(:),y(:),z(:));
[X,Y] = ndgrid(1:floor(max(x(:))));
Z = F(X,Y);
You will find this rather unsatisfactory, but it is the best that can be done while maintaining the axes labels with a simple surf(Z)


Sign in to comment.