我在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]);
此外,任何投影背后的数学链接,以及示例都会很好:)
答案 0 :(得分:0)
预测取决于view
。如果您尝试使用各种view
值,则2D中的项目将产生不同的结果。
例如,[az,el]=view(60,30);
您将进行此预测。
和[az,el]=view(30,15);
您将拥有此图片
答案 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
上看到