Why does clipping fail to work with MATLAB 3-D plots in MATLAB R2014a and earlier?
2 views (last 30 days)
Show older comments
MathWorks Support Team
on 27 Jun 2009
Edited: MathWorks Support Team
on 3 Sep 2015
Clipping does not seem to work with 3-D plots. The plot will go outside the axes even when I have clipping 'on'.
Accepted Answer
MathWorks Support Team
on 3 Sep 2015
The clipping facility in MATLAB is intended primarily for 2-D plots. Therefore, when you have a 3-D plot, it is handled as if it is a 2-D plot.
As a possible workaround you can try the following:
Suppose the equation of the slicing plane is A*x + B*y+ C*z = D for scalar A,B,C,D, then the boolean expression
d = find(A*x + B*y + C*z > D)
will produce an index vector into the x,y,z matrices (all assumed to be the same size).
The following subsequent commands
n = NaN;
x(d) = n(ones(size(d)));
y(d) = n(ones(size(d)));
z(d) = n(ones(size(d)));
will produce x,y,z matrices with NaN's on one side of the plane. Plotting the data will produce the desired plot.
Here is an example:
A = .1; B = -1; C = .3; D = .9; n = NaN; N = 200;
[x,y,z] = sphere(N);
d = find(A*x + B*y + C*z > D);
x(d) = n(ones(size(d)));
y(d) = n(ones(size(d)));
z(d) = n(ones(size(d)));
surf(x,y,z,'edgecolor','none')
hold on
[x,y,z] = sphere(N); x = x*.5; y = y*.5; z = z*.5;
d = find(A*x + B*y + C*z > D);
x(d) = n(ones(size(d)));
y(d) = n(ones(size(d)));
z(d) = n(ones(size(d)));
surf(x,y,z,'edgecolor','none')
hold off
Note that starting with MATLAB R2014b clipping of 3D plots is fully supported: "The Clipping property clips plotted objects to the six sides of the axes box defined by the axis limits." Please refer to http://www.mathworks.com/help/releases/R2014b/matlab/release-notes.html
0 Comments
More Answers (0)
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!