Understanding implicit surface plot behavior
古いコメントを表示
Here is some code that plots an implicit infinite, tilted cylinder.
Q=diag([0,1,1]./3^2);
axis([-5 5 -5 5 -5 5])
h1=fimplicit3(@(x,y,z) quadform(x,y,z,Q) ,'EdgeColor','none','FaceAlpha',0.3);
view([-2,11])
xlabel X, ylabel Y, zlabel Z
T=makehgtform('axisrotate',[0 1 0],pi/4);
h1.Parent=hgtransform('Matrix',T);
My first question is, why doesn't the cylinder, which is infinite, extend to the axis limits?
My second question is, below is the same code again, except at the very end, we double the extent of the axes. Why does the cylinder become invisible when this is done?
figure;
axis([-5 5 -5 5 -5 5])
h2=fimplicit3(@(x,y,z) quadform(x,y,z,Q) ,'EdgeColor','none','FaceAlpha',0.3);
view([-2,11])
xlabel X, ylabel Y, zlabel Z
T=makehgtform('axisrotate',[0 1 0],pi/4);
h2.Parent=hgtransform('Matrix',T);
axis([-5 5 -5 5 -5 5]*2) %<----makes the cylinder disappear!
function d=quadform(x,y,z, Q)
xyz=[x(:).'; y(:).'; z(:).'];
d=reshape( (sum((Q*xyz).*xyz)-1), size(x));
end
採用された回答
その他の回答 (1 件)
Nipun
2024 年 5 月 14 日
0 投票
Hi Matt,
Your observations touch on how MATLAB handles the rendering of implicit functions and the effects of axis scaling on graphical objects, particularly those transformed with hierarchical transformations like hgtransform.
The two sections below highlight the questions asked:
1. Finite Rendering of Infinite Shapes
The cylinder doesn't extend to the axis limits because fimplicit3 renders shapes within a finite bounding box based on the current axis limits for visualization, despite the theoretical shape being infinite.
2. Cylinder Becomes Invisible After Doubling Axis Limits
The cylinder becomes invisible because fimplicit3 generates a mesh based on the axis limits at the time of plotting. Expanding the axis limits afterwards doesn't recalculate this mesh. The transformation applied (hgtransform) affects the object's position and orientation but doesn't adjust the mesh to fit the new axis limits, causing the object to potentially fall outside the visible rendering area.
Below, I recommend a potential solution to address the issue.
Solution: To ensure visibility after changing axis limits, re-plot the cylinder with the new axis limits set beforehand. This approach makes MATLAB generate the mesh according to the updated viewport, ensuring the object remains visible.
Hope this helps.
Regards,
Nipun
1 件のコメント
カテゴリ
ヘルプ センター および File Exchange で Surface and Mesh Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




