matlab - Matlab图形问题:半散点,红色区域内的黑线
问题描述
考虑 Matlab 中的下图(此处为矩阵)
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')
这两个都没有给我我想要的东西。你能帮忙吗?
解决方案
您看到的问题是补丁被绘制在完全相同的平面上,这导致了这种渲染效果。这称为Z 战斗。
一个简单的解决方法是为绘制在其他平面前面的一些平面添加一些小偏移。您可以调整此值直到效果消失,并且缩进位置的错误最小。
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')
您可以对部分绘制到平面中的蓝点执行相同操作。只要给它一点偏移量,它就会再次显示为一个完整的点。我用红色和蓝色绘制了点,所以你可以看到位置的偏移量。
推荐阅读
- http2 - HTTP/2 中的标头如何在客户端和服务器端保持同步?
- java - websphere 7 中的应用程序部署失败
- python - Hadoop(Hive)中是否有类似存储过程/作业的东西
- python-3.x - Python CSV 罗宾汉
- javascript - 如何选择元素的第二个孩子而不选择它的第一个孩子的孩子
- angular - angular6 angularfire 未初始化
- reactjs - 如何在不使用 npm 的情况下正确呈现 react datepicker?
- java - 使用 Apache cxf 2.x 和 Wsimport 生成客户端代码
- android - 在 Oreo+ 中记录通话
- c++ - 在“for”语句的第二个“参数”中声明的对象的生命周期