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

project 3D plot to 2D screen plane

我在 Matlab 中得到了以下结果(解决方案如 http://uk.mathworks.com/help/matlab/ref/viewmtx.html 中的示例):

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]);

如何获取第3剧情的屏幕投影?

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

投影取决于 view。如果您尝试使用各种 view 值,二维项目将产生不同的结果。

例如,[az,el]=view(60,30);,你就会得到这个投影。

[az,el]=view(30,15);你会得到这张图片

原来你需要通过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