Overlay curves on an existing surface plot

조회 수: 50 (최근 30일)
Del
Del 2013년 3월 17일
편집: Walter Roberson 2019년 5월 19일
How to add/overlay curves on an existing plot that was done by a surf() function? I have tried doing that before, but some of the curves are totally lost in the blue colors of my surf()plot.
I read somewhere that I could use "plot3()" BEFORE using surf(), however, my plots are in 2-D (I am using view(2), because I just want to obtain the Feasible region), and I am not quite sure how to use plot3() in this case. Any idea?
  댓글 수: 1
Torbjörn Pettersson
Torbjörn Pettersson 2019년 5월 16일
You are correct the it is good to use plot3. If you do this before or after you have generated the surf do not matter (I normaly di it after the surf).
The command plot3 adds the z to the ploted line/point, and you need to set the "z" value higher than maximum z in the data you use in the surf.
I will give the following code as an example showing the difference between plot and plot3 together with surf.
[X,Y,Z] = peaks(25);
figure
surf(X,Y,Z);
view(2), shading interp
hold on
plot([-3 3],[0 0], 'k-')
plot3([-3 3],[0.25 0.25],[25 25], 'b-')
The black line from the plot command will not be visible. But the plot3 shows on top when I use 25 for z.

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

채택된 답변

Walter Roberson
Walter Roberson 2013년 3월 17일
편집: Walter Roberson 2019년 5월 19일
plot() pretty much creates lines with Z coordinate 0. surf() is going to be using 3D coordinates. Unless your surface happens to be below z 0, your plot lines will be below (at least part of) the surface.
If you want to draw lines right on the surface, then you would need to use z coordinates appropriate for each location when you constructed the line. If your line is a coarser resolution than your surface, this might require interpolating the line at each grid location in order to get the z right for each place.
What you might possibly find easier is to use texture mapping of an image containing the lines, onto the surface. This approach won't be much fun either, though.
Anyhow, remember: if there are two objects both in 3D space, then the object that is closer to the eye is the one that is going to be visible. (lines are implicitly 3D space even when using plot() instead of plot3())
If two three-space are equally close to the eye, then the precedence depends on which renderer you are using. zbuffer and painters will render in order, newest object on top. opengl, however, will ignore the order, and is defined to render lines and surfaces in a particular order (and you'll probably want the exact opposite order at some point... which might be what your graphics driver gives to you as some exactly reverse the defined order!)

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Lighting, Transparency, and Shading에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by