此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

2.9.10 三维图形的坐标系

Mathematica 画三维图形时,总要在外边加一个立方盒. 在默认设置 Boxed->True下,Mathematica 明显画出这个盒子,Mathematica 一般 自动擦去该立方盒之外的任何对象.
选项 PlotRange 指出立方盒应该包括范围的  坐标. 与二维相同, 默认设置是 PlotRange->Automatic,它令Mathematica 用内部算法尽量 包含图形有意义的部分,而擦掉外围部分,PlotRange->AllMathematica 包含所有部分.

调入一个包含各种多面体的程序包

这里产生一个星状的 20 面体

星状 20 面体画在立方盒中

使用 PlotRange 这一设置,这个 20 面体的许多部分位于立方盒之外,所以被擦去

与二维情况类似,可以用原始坐标或尺度坐标在三维对象中确定元素的位置. 尺度坐标由 Scaled[ sx, sy, sz ] 给出,每一个方向的变化范围是从 0 到 1. 坐标系在盒子上为右手系.

三维对象的坐标系

在立方盒的一个顶点上放一个立方体

在指出各种图形基元应放在盒子内的什么位置后,就要告诉 Mathematica 怎样画出盒子. 第一步是确定盒子的形状,这与确定二维 图形的纵横比类似.在三维情形中,用选项 BoxRatios 指定盒子边长的比例. 对 Graphics3D 对象,默认BoxRatios->Automatic, 它使得盒子的形状根据内容的坐标范围来确定.

指定三维对象边界盒的形状

在一个高盒子中显示 20 面多面体

产生三维图像时,必须告诉 Mathematica 从哪一个方位来观察对象,这需要使用 ViewPoint 选项. 在前面已经给出了这个选项的常用设置,一般可让 Mathematica 取盒子外 的任何一个视点. 视点用 ViewPoint ->  sx, sy, sz  的值用一个特殊的坐标系 给出,坐标系的原点在盒子的中心,坐标的刻度是将盒子最长的一个边 作为一个单位来度量,盒子的其它边长由可选项 BoxRatios 的设置确定.对 一个正立方盒子而言,每个边的坐标都是从 -1/21/2 变化. 要注意视点总在盒子之外.

用默认视点 {1.3, -2.4, 2} 产生一个图形

这是视点接近盒子的一个顶点时得到的图形

当离盒子较远时,透视效果变小

三维对象的位置和定向设置

在建立三维图形时,除指定视点外,还要指定如何给最终图形加边框,这用选项 ViewCenterViewVertical 来实现.
ViewCenter 决定对象的哪一点出现在最终图形的中心,这一点由各方向 盒子的边从 0 到 1 变化的尺度坐标确定. 用ViewCenter->{1/2,1/2,1/2} 时,盒子的中心将出现在最终图形的中心. 由于不同视点的选择, 盒子不一定对移,盒子的中心不一定在最终图形的中心. 可以用 ViewCenter->Automatic 使盒子中心在最终图形区域的中心.
ViewVertical 指定对象的哪一个方位应该在最终图形中指向上方. ViewVertical 设置用尺度坐标指出哪一个方向应该在最终图形上竖直 向上. 默认设置 ViewVertical->{0,0,1} 使得原始坐标的 方向在 最终图形上总是竖直向上.

ViewCenter 的这种设置时,盒子的一个顶点放在图形的中心

ViewVertical 的这种设置使盒子的 轴方向在图形上竖直向上

设置可选项 ViewPoint, ViewCenterViewVertical 也就是确定怎 样 观察一个物理的对象: ViewPoint 确定头的位置,ViewCenter 确定朝向哪儿看,ViewVertical 确定头向上的方式.
用坐标系的术语来说,设置 ViewPoint, ViewCenterViewVertical 就是确定如何把盒子上的三维坐标转换为最终显示 区域中图形的坐标.
出于某些目的,将最终显示区域中的坐标想象成三维是很有用的.  轴指向纸内.在这种"显示坐标系中" 指定的位置当变化 ViewPoint 等时维持不变.下一节将讨论的光源位置就是 按这种显示坐标系确定的.

三维图形的坐标系

当获得了三维对象的二维映象后,就产生了如何生成图象的问题,这与 二维图形中的问题相同. 例如,可以通过改变纵横比来修改图形的最终形状, 通过设置选项 PlotRegion 来指定图形的整个显示区域.

这里修改了最终图形的纵横比

Mathematica 通常缩放三维对象的图形,使其在给定的显示区域中尽可能大. 尽管在大部分情况下这正是所需要的,但会产生一个所画出的三维对象的尺 寸会随着定位不同而变化的结果.可以通过设置选项 SphericalRegion->True 来避免这种变化. 在这种设置下,Mathematica 在三维边界盒子旬侧放一个球面, 并调整最后的图形使得整个球面在所指定的显示区域之内. 这个球面的中心与边 界盒子的中心重合,并且恰好把边界盒子放在球面内.

这里画出了拉得相当长的一个图形

使用 SphericalRegion->True,调整最后的图像使得边界盒外的球面整个落在显示区域内

通过设置 SphericalRegion->True 可以使一个对象的调整和这个对象的所有 定位相一致,这对产生同一对象不同定位的动态序列是很有用的.

三维图像的伸缩