据我所知,Matlab没有现成的方法来调整3D图形的投影透视失真,因此,给出下面的代码:
figure;
x1 = rand(1,10);
x2 = rand(1,10);
x3 = rand(1,10);
scatter3(x1,x2,x3,80,'o','filled'); hold on
ax = gca;
ax.Projection='perspective';
结果并不令人印象深刻:
我尝试修改ax.CameraTarget
、ax.CameraPosition
等,但几乎不可能修改"消失点"以使其看起来更失真,例如:
关于如何实现对图形外观的这种级别的控制,有什么帮助吗?
谢谢!
1条答案
按热度按时间zphenhs41#
你可以通过进入“广角”模式来实现这一点,也就是说,选择一个大的
CameraViewAngle
,同时将相机进一步移向绘图。这会给你带来相当大的失真,就像你可能从广角相机镜头中看到的那样。在下面的代码中,我假设摄像机放置在坐标系的中心
z
-水平,x
和y
-坐标正好在坐标系的两个边缘点之间的连接线上位移,并按其长度向后移动。其余部分基本上是“余弦定律”。请在给定的可感知水平内自由调整摄像机位置,使得视角保持在0和180度之间的范围内,https://de.mathworks.com/help/matlab/ref/matlab.graphics.axis.axes-properties.html#budumk7-View)。该示例假定x
-y
平面中的视角与y
-z
平面中的视角大致相同。否则,需要扩展计算并取两者的平均或最大Angular 。