将三维图形投影到二维屏幕平面的项目

3

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

如何获取第三个图的屏幕投影?

另外,任何与投影相关的数学链接和示例也会很好 :)


第四个图不就是第三个图在[x,z]平面上的视图吗? - Adriaan
@Adriaan 这不应该是这样的。第一个图形应用相同的变换矩阵并获取屏幕投影(或者这就是我认为它所做的)。 - Oleg
我认为他们应该这样做。据我所见,您并没有修改绘制的函数,只是改变了其观察角度。第二张图片再次只是第一张图片的[x,z]平面视图。你可以手动做到这一点(单击绘图中的“旋转”图标),但是这个代码显然会自动旋转绘图。 - Adriaan
我需要第三个图的屏幕投影(2D)。 - Oleg
2个回答

0

投影取决于视图。如果您尝试使用不同的视图值,2D中的投影将产生不同的结果。

例如,[az,el]=view(60,30);,您将得到此投影。

enter image description here

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

enter image description here


我修改了问题,因为之前的问题没有表达出我的意思。因此,尽管您的回答是有关上下文的,但并不能解决我的问题。对此给您带来的不便表示抱歉。 - Oleg

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接