【问题标题】:How Matlab calculates the camera view angle?Matlab如何计算相机视角?
【发布时间】:2010-05-31 19:28:38
【问题描述】:

我正在使用 matlab 来可视化一个场景。为了放大场景,我可以通过eather来做到这一点: - 修复cameraposition和cameratarget并改变cameraviewangle.or - 固定 cameratarget 和 cameraview 角度,并沿着视线移动相机(由 cameraPosition 和 cameraTarget 定义)。

我知道如何设置cameraposition CameraTarget 和viewangle 的值,但我不知道如何定义最佳视角。在cameraviewangle的自动模式下,matlab计算从指定的摄像机位置捕获所有场景的最小视角。感谢您对理解这一点的任何帮助。

伊曼

【问题讨论】:

    标签: matlab


    【解决方案1】:

    在 MATLAB 中,相机视角与“缩放”功能基本相同,因为没有透视失真。视角越小,图像被有效放大的效果就越大,因为视口被放大以适应图形窗口的大小。

    The documentation of 'camva' 包含这个示例,它创建了两个按钮来放大/缩小场景:

    % Set the range checking in the callback statements to keep
    % the values for the camera view angle in the range greater 
    % than zero and less than 180.
    uicontrol('Style','pushbutton',...
      'String','Zoom In',...
      'Position',[20 20 60 20],...
      'Callback','if camva <= 1;return;else;camva(camva-1);end');
    uicontrol('Style','pushbutton',...
      'String','Zoom Out',...
      'Position',[100 20 60 20],...
      'Callback','if camva >= 179;return;else;camva(camva+1);end');
    % Now create a graph to zoom in and out on:
    surf(peaks);
    

    因此,如果您想缩放,请调整视角。如果要自动“缩放”以适应整个场景,请设置:

    camva('auto');
    

    【讨论】:

      【解决方案2】:

      我可能过于简单化了,但它不应该归结为几何吗?如果您有相机相对于场景的位置,您应该能够使用场景的宽度来确定包含所有场景所需的角度。例如,如果以直角观看时,宽度为“w”的场景与相机的距离为“d”,则可以使用正弦定律推导出所需的最小视角:

      alpha=arcsin(w/sqrt(d^2+(w/2)^2))
      

      所以从图片来看:

      您的相机将位于 C 处,您的场景宽度“w”将是线段 AB。从相机到场景的距离“d”为线段 CD,最小视角为 ACB。

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 2015-09-25
        • 1970-01-01
        • 2017-10-15
        • 2017-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多