Adding a circle in a 3D surface plot, viewed in 2D

6 次查看(过去 30 天)
In the given code section, I am plotting some values as Z-coordinates in a surface plot, and then viewing it in 2D. I want to mark a circle on the same plot, given by the equation (x-13.125e-3)*(x-13.125e-3)+(y-5e-3)*(y-5e-3)=1.25e-3*1.25e-3. 'fplot' did not work, as I had assumed. How do I do it then?
figure(1)
[X,Y]=meshgrid(unique(CORD(:,1)),unique(CORD(:,2)));
Unrecognized function or variable 'CORD'.
surf(X,Y,damageFactorForAllNodesAtEndTimeStepReversed)
shading flat
colorbar("eastoutside")
xlabel("Length of sample")
ylabel("Width of sample")
title("Crack path at end time-step for homogeneous plate with soft inclusion")
view(2)
hold on
fplot(@(t) 1.25e-3*sin(t)+13.125e-3, @(t) 1.25e-3*cos(t)+5e-3)
If any other information is needed, do ask.
  1 个评论
Mathieu NOE
Mathieu NOE 2025-5-13
hello
seems the code itself should work as in this example below
we cannot run exactly your code as you don't provide the data along , but the idea in itself is fine : just be aware that your circle may be hidden partially of completely depending of it's z values vs the surf z values : demo below
surf(peaks)
shading flat
colorbar("eastoutside")
xlabel("Length of sample")
ylabel("Width of sample")
title("Crack path at end time-step for homogeneous plate with soft inclusion")
view(2)
hold on
% fplot(@(t) 5*sin(t)+13, @(t) 5*cos(t)+25,'r'); % works , full circle is visible
fplot(@(t) 5*sin(t)+18, @(t) 5*cos(t)+25,'r'); % works , but only a fraction of the circle is visible
% fplot(@(t) 5*sin(t)+25, @(t) 5*cos(t)+25,'r'); % doesn't work !! the
% circle is "below" in Z dir vs the surf object
hold off
%axis equal

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2025-5-13
编辑:Walter Roberson 2025-5-13
If you are using fplot() then you need to ensure that some of your Z values are below 0 in the region you are drawing the circle in, as fplot() with two function parameters draws the resulting shape all at Z = 0 but surf() draws the Z values at the Z coordinate you pass in. If the Z coordinates you pass in are above 0 then the surface completely hides the fplot() drawn lines.
[X,Y,Z] = peaks();
surf(X*0.005, Y*0.005, (Z-1)*0.001, 'edgecolor', 'none');
view(2);
hold on
fplot(@(t) 1.25e-3*sin(t)+13.125e-3, @(t) 1.25e-3*cos(t)+5e-3)
axis equal
hold off
  2 个评论
Walter Roberson
Walter Roberson 2025-5-13
If you want to draw a circle "on top" of the surf() then you need to calculate the maximum Z coordinate drawn with surf(), and calculate specific X and Y coordinates for the circle and use plot3() specifying those X and Y together with a constant Z that is the maximum Z of the surf()
Walter Roberson
Walter Roberson 2025-5-13
Of course there is the factor that the X and Y you are providing to surf() might happen to be a fairly different scale from the coordinates calculated for the circle in fplot(), so the circle might potentially be nearly invisible compared to the surf()

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Surface and Mesh Plots 的更多信息

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by