Unexpected flat surface with surf command
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have two parallel lines in a 3D space. I use the following code to create a curved surface which goes though all lines:
% Iterate through the cells in data_cell
for i = 1:2
% Extract the current 500x2 array
current_data = data_cell{i};
% Append the first column values to x
x(:, i) = current_data(:, 1);
% Append the second column values to z
z(:, i) = current_data(:, 2);
% Calculate the index for Dp_values using modular arithmetic
dp_index = mod(i - 1, length(Dp_values)) + 1;
% Create a vector of propeller sizes for this data cell
propeller_size = Dp_values(dp_index) * ones(size(current_data, 1), 1);
y(:, i) = propeller_size;
end
[X, Y] = meshgrid(x, Dp_values);
Z = griddata(x, y, z, X, Y, 'cubic');
surf(X, Y, Z);
However, the final result shows a flat surface on top of the curved surface. The figure looks like this:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1497814/image.png)
I am not sure what goes wrong here, and I have tried to make x, y, z as vectors but it still gave me the same result.
I appreciate any help. Thanks.
For the reference, the data in x is like
[0.0800000000000000 0.0800000000000000
0.0818000000000000 0.0818000000000000
0.0837000000000000 0.0837000000000000
...
0.998200000000000 0.998200000000000
1 1 ]
and y is like
[0.300000000000000 0.470000000000000
0.300000000000000 0.470000000000000
0.300000000000000 0.470000000000000
...
0.300000000000000 0.470000000000000]
and z is like
[0.545136000000000 0.282617000000000
0.541518000000000 0.281099000000000
0.537900000000000 0.279581000000000
...
0.165439000000000 0.0849740000000000]
0 comentarios
Respuestas (1)
Star Strider
el 30 de Sept. de 2023
I do not completely understand the problem, however:
[X, Y] = meshgrid(sort(x), sort(Dp_values));
could solve the problem.
The griddata, scatteredInterpolant, and other such functions will likely not care if the data are sorted or not, so long as the argument dimensions make sense to the functions. (If all goes according to plan, sorting the initial vectors should produce the desired surf plot)
4 comentarios
Star Strider
el 30 de Sept. de 2023
Transposing the matrices obviously worked.
Experiment with the scatteredInterpolant function (instead of griddata) to see if it gives a better result. The values may not be defined between the red lines, so a linear interpolation may be the only option, regardless of the chosen interpolation method.
I do not have your data, so this is the best I can do.
Ver también
Categorías
Más información sobre Interpolation en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!