将 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
我在 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