将3D绘图投影到2D屏幕平面

时间:2015-10-12 20:49:23

标签: matlab 3d 2d projection

我在Matlab中得到了以下内容(解决方案与http://uk.mathworks.com/help/matlab/ref/viewmtx.html中的示例相同):

enter image description here

subplot(211)
h = ezplot3('cos(t)', 'sin(t)', 'sin(5*t)', [-pi pi]);
data = get(h,{'XData','YData','Zdata'});
data = [cat(1,data{:})', ones(numel(data{1}),1)];

% Projection matrix on screen
[az,el] = view(); A = viewmtx(az,el);
data_transformed = A*data';

subplot(212)
plot(data_transformed(1,:), data_transformed(2,:))

这种转变不适用于:

h = ezplot3('t', 'sin(t)', '20*cos(t)', [0 10*pi]);

enter image description here

如何获得第3幅图的屏幕投影?

此外,任何投影背后的数学链接,以及示例都会很好:)

2 个答案:

答案 0 :(得分:0)

预测取决于view。如果您尝试使用各种view值,则2D中的项目将产生不同的结果。

例如,[az,el]=view(60,30);您将进行此预测。

enter image description here

[az,el]=view(30,15);您将拥有此图片

enter image description here

答案 1 :(得分:0)

事实证明你需要按DataAspectRatio进行标准化,因此viewTransform矩阵变为:

[az, el] = view(gca);
A = viewmtx(az,el) * makehgtform('scale',1./get(gca,'DataAspectRatio'));

完整答案可以在http://uk.mathworks.com/matlabcentral/answers/248362-screen-2d-projection-of-3d-plot

上看到