Matlab图形问题:零散点,红色区域内的黑线

问题描述 投票:1回答:1

请考虑Matlab中的下图(矩阵here

load matrices
%Rb, vertices_deg, vertices_comp

close all
patch([0 0 1],[0 1 0],[1 0 0],[0.8 0.8 0.8]);
axis equal 
axis([0 1 0 1 0 1])
view(120,30)
hold on

T = delaunayTriangulation(Rb.');
K = convexHull(T);
patch('Faces',K,'Vertices',T.Points,'FaceColor','k','edgecolor','k');
hold on

scatter3(vertices_deg(:,1), vertices_deg(:,2) , vertices_deg(:,3),100,'o','filled','b')
hold on

patch(vertices_comp(:,1), vertices_comp(:,2) , vertices_comp(:,3),'red')
hold off

xlim([0 1])
ylim([0 1])
zlim([0,1])
box on
set(gca, 'ytick',0:0.2:1,'xtick',0:0.2:1,'ztick',0:0.2:1,'FontSize',13)

我想以这样的方式保存这个数字:

  • 在红色区域内,我在Matlab输出中看不到黑线

  • 蓝色散点是一个完整的圆(而不是半圆,因为它出现在Matlab输出中)

我尝试了两种保存图形的方法

saveas(gcf,'3.jpg')
print(gcf, '3.jpg', '-dpng', '-r300', '-painters') 

这两个都不给我我想要的东西。你能帮忙吗?

这是我通过PRINT得到的enter image description here

这是我从SAVEAS获得的enter image description here

这里是Matlab窗口的屏幕截图enter image description here

matlab matlab-figure
1个回答
4
投票

您所看到的问题是,将色块绘制在完全相同的平面上,这会导致这种渲染效果。这称为Z-fighting

一个简单的解决方法是为在其他平面前面绘制的某些平面添加一些小的偏移量。您可以调整该值,直到效果消失,并且缩进位置的误差最小。

load matrices

close all
patch([0 0 1],[0 1 0],[1 0 0],[0.8 0.8 0.8]);
axis equal 
axis([0 1 0 1 0 1])
view(120,30)
hold on

T = delaunayTriangulation(Rb.');
K = convexHull(T);

d_patch = 0.001;
d_z = 0.01;

patch('Faces',K,'Vertices',T.Points + d_patch,'FaceColor','k','edgecolor','k');
patch(vertices_comp(:,1), vertices_comp(:,2) , vertices_comp(:,3)+d_z,'red')

scatter3(vertices_deg(:,1), vertices_deg(:,2) , vertices_deg(:,3),100,'o','filled','r')
scatter3(vertices_deg(:,1), vertices_deg(:,2) , vertices_deg(:,3)+2*d_z,100,'o','filled','b')

xlim([0 1])
ylim([0 1])
zlim([0,1])
box on
set(gca, 'ytick',0:0.2:1,'xtick',0:0.2:1,'ztick',0:0.2:1,'FontSize',13)

saveas(gcf,'3saveas.png')
print(gcf, '3print.png', '-dpng', '-r300', '-painters') 

您可以对部分绘制到平面中的蓝点执行相同的操作。只要给它一点偏移,它就会再次显示为一个完整的点。我以红色和蓝色绘制了点,因此可以看到位置的偏移量。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.