添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
三维图形指令 导入图形和声音
图形结构
"图形和声音" 讨论了如何用 Plot ListPlot 等函数绘制函数和数据的图形. 本节讨论 Wolfram 语言如何表示这些图形,如何编程去生成更复杂的图形.
InputForm 告诉 Wolfram 语言如何表示图形. 每个点被表示为一个 Point 图形基元的坐标形式. 本例中使用的所有图形选项也被给出:
Graphics3D [ list ]
生成三维图形
Plot ListPlot 等在 "图形和声音的结构" 中讨论的函数都是按照先建立 Wolfram 语言内部图形对象,然后显示其顺序工作.
对象 Graphics 被 Wolfram 语言计算,但分号阻止了其输出:
可以使用 Print 命令以副产品形式输出图形 . 副产品形式的图形在输出时没有标签 Out [ ]
Show [ g , opts ]
显示由新的选项 opts 指定的一个图形对象
Show [ g 1 , g 2 , ]
显示由选项 g 1 等指定的多个图形对象的组合
Show [ g 1 , g 2 , , opts ]
显示由新的选项 opts 指定的多个图形对象
Show 可用于改变已生成图形的选项,也可用于合并多幅图形.
Show 来调整一个已有图形的 Background 选项:
Show 来合并两幅图形. PlotRange 和其他选项所用的值都由第一副图形决定:
给定一个图形基元列表后,Wolfram 语言提供了两种方式去修改最终的图形. 首先,可以在图形基元列表中插入一些图形指令,例如 RGBColor ,以修改随后列表中的图形基元. 用这种方式,用户可以指定如何修改一个给定的图形基元列表.
创建一个包含 Polygon 图形基元的二维图形对象:
InputForm 完整地显示了图形对象:
通过增加图形选项 Frame 用户可以修改图形的整体外观:
InputForm 显示了选项被对象 Graphics 所采用:
Show 中可以指定图形选项. 因此,一个直截了当的方式是取一个图形对象,然后选择不同的图形选项将其显示.
然而应注意到 Show 总是返回已显示的图形对象. 如果在 Show 中指定图形选项,这些选项就会自动的插入在 Show 返回的图形对象中. 于是,除非明确指定其他的图形选项,对相同的对象再次使用 Show 显示的图形将是相同的. 在任何情况下,新指定的选项会覆盖既有的选项.
Point [ { x , y } ]
在位置 x y 的一个点
Line [ { { x 1 , y 1 } , { x 2 , y 2 } , } ]
通过 { x 1 , y 1 } { x 2 , y 2 } 的线段
Rectangle [ { x min , y min } , { x max , y max } ]
填充的矩形
Polygon [ { { x 1 , y 1 } , { x 2 , y 2 } , } ]
具有指定角列表的填充多边形
Circle [ { x , y } , r ]
圆心在 x y ,半径为 r 的圆
Disk [ { x , y } , r ]
圆心在 x y ,半径为 r 的填充圆盘
Raster [ { { a 11 , a 12 , } , { a 21 , } , } ]
灰度在 0 和 1 之间的矩形阵列
Text [ expr , { x , y } ]
中心在 x y expr 文本 (见 " 文本中的图形基元 ")
可以将用图形基元产生的图形对象和用 Plot 等函数产生的图形对象叠合在一起.
两个蓝色的 Rectangle (矩形) 图形元素:
Polygon (多边形) 图形基元选取一个 坐标列表,其对应于多边形的顶点. Wolfram 系统将第一个和最后一个顶点连在一起,并填充这个多变形.
Point [ { pt 1 , pt 2 , } ]
pt 1 pt 2 组成的一个复点
Line [ { line 1 , line 2 , } ]
由线段 line 1 line 2 组成的一个复线
Polygon [ { poly 1 , poly 2 , } ]
poly 1 poly 2 组成的一个复多变形
类似的,通过将一个坐标列表置于一个单一 Point (点)基元内部的方法可以表示大量的点. 这种表示方法非常高效,并且可以被 Wolfram 系统的前端更快速地显示. RGBColor 等图形指令会一致地应用于整个基元集合.
Circle [ { x , y } , r ]
中心在 { x , y } ,半径为 r 的圆
Circle [ { x , y } , { r x , r y } ]
具有长短半轴 r x r y 的椭圆
Circle [ { x , y } , r , { theta 1 , theta 2 } ]
圆弧
Circle [ { x , y } , { r x , r y } , { theta 1 , theta 2 } ]
椭圆弧
Disk [ { x , y } , r ]
,etc.
填充的圆盘
Raster [ { { a 11 , a 12 , } , { a 21 , } , } ]
值在0和1之间的灰度阵列
Raster [ { { { a 11 , o 11 } , } , } ]
阻光度在0和1之间的灰度阵列
Raster [ { { { r 11 , g 11 , b 11 } , } , } ]
值在0和1之间的RGB值阵列
Raster [ { { { r 11 , g 11 , b 11 , o 11 } , } , } ]
阻光度在0和1之间的RGB值阵列
Raster [ array , { { x min , y min } , { x max , y max } } , { z min , z max } ]
灰度在 z min z max 之间的由 { x min , y min } { x max , y max } 定义的矩形阵列
选项 ColorFunction 可以用于改变 Raster (光栅)的缺省颜色:
GrayLevel [ i ]
0(黑)和1(白)之间的灰度
RGBColor [ r , g , b ]
用0和1指定红、绿、蓝分量的颜色
Hue [ h ]
色度值 h 在0和1之间的颜色
Hue [ h , s , b ]
色度、饱和度和亮度值均在0和1之间的颜色
Wolfram 语言中的基本颜色指定.
Wolfram 语言直接接收许多指定颜色所用的颜色名. 例如 Red Gray LightGreen Purple 这些颜色名是作为衡量 RGBColor 的变量来执行的. 这些颜色名可与颜色指令互换.
函数 Hue [ h ] 可以很方便地只用一个参数来指定颜色的范围. h 从0 到1变化, Hue [ h ] 由红、黄、绿、青、蓝、洋红、黑再变到红. Hue [ h , s , b ] 不仅可以指定颜色的 色调 ,还可以指定 饱和度 亮度 . 饱和度等于1给出最深的颜色,饱和度降到零的过程中,颜色越来越浅.
用户在给指一个图形指令如 RGBColor 时,将影响到一个特定列表中的所有后继图形元素. Wolfram 语言也支持仅影响特定类型的图形元素的各种图形指令.
图形指令 PointSize [ d ] 指定了所有的 Point 元素在图形对象中应当绘制成以直径为 d 的圆. PointSize 中,直径 d 是整个图形宽度的一个比例.
Wolfram 语言也提供了图形指令 AbsolutePointSize [ d ] ,其用固定的单位指定点的 绝对 直径. 该单位为 英寸,约等于打印机的一个点.
Thickness [ w ]
按整个图形宽度的比例给出所有线的宽度 w
AbsoluteThickness [ w ]
用绝对单位给出所有线的宽度 w
Dashing [ { w 1 , w 2 , } ]
将所有的线显示为长度依次为 w 1 w 2 的虚线段
AbsoluteDashing [ { w 1 , w 2 , } ]
用绝对单位去度量虚线段
CapForm [ type ]
给出所有线的端点形状
JoinForm [ type ]
给出所有线的接点形状
图形指令 Dashing 可产生各种虚线. 其基本思想是把线分解为交替绘出和省去的小段. 通过改变这些小段的长度,可以得到不同风格的线. Dashing 允许用户指定一系列小段的长度. 在画出整条线的过程中,这些小段的长度序列可以根据需要多次重复.
Dashing 的功能可以通过指定一个空指令而关闭. 此处仅第二条线的 Dashing 功能被关闭:
图形指令要求给出一个特定的数值来表示大小,也接受 Tiny Small Medium Large 等文字描述. 对于每一个指令来说,这些值被精确地调整以保证图形的显示能被人眼正确地感知.
图形指令 CapForm 用于指定直线端点的形状. 端点形状可以设为 "Butt" "Square" 、或者 "Round" .
显示 CapForm 可以选择的不同形状:
CapForm [ "Butt" ] 指明线段要恰好在其终点处结束. "Square" 使线段端点比线段终点延长了一半的线宽. "Round" 使线段端点为直径等于线宽的半圆弧.
使用 JoinForm 指令可以指定线段之间接点的形状.
JoinForm 可以选择的不同形状:
PlotStyle -> style
指定在 Plot 中所有曲线的风格
PlotStyle -> { { style 1 } , { style 2 } , }
指定在 Plot 的曲线序列中循环使用的风格
MeshStyle -> style
指定密度图和曲面图中的网格使用的风格
BoxStyle -> style
指定三维图形中边界单元所使用的风格
可以使用不同的 PlotStyle 表达式指定每条曲线的风格:
Background -> color
指定图形的背景颜色
BaseStyle -> color
指定图形的基本风格,相关元素不受 PlotStyle 的影响
Prolog -> g
在画图前给出图形
Epilog -> g
在画图后给出图形
PlotRange -> { { x min , x max } , { y min , y max } }
包含在图形中的原始坐标的范围
选项 PlotRange 指明了要包含的原始坐标范围. 正如在 "图形选项" 所讨论的,缺省设置是 PlotRange -> Automatic ,这使得 Wolfram 语言选择的范围能在去掉 异常值"的同时,尽量包括图形中所有 令人感兴趣"的部分. 通过设置 PlotRange -> All ,可以使 Wolfram 语言包括所有点. 用户也可以指明要包括的坐标范围.
给出一个明确的 PlotRange ,可以使用户将图形的某一部分放大:
AspectRatio -> Automatic
按原始坐标系确定显示区域的形状
重要的一点是要注意设定的 AspectRatio 不影响尺度或显示坐标的含义. 在显示区域内这些坐标总是从0到1变化. AspectRatio 所改变的是这个显示区域的形状.
在二维图形中, AspectRatio 的缺省设置是 Automatic . 这样图形所用的纵横比由原始坐标系决定,而非一个固定值. 原始坐标系中的 方向的一个单位与最终显示区域中 方向的一个单位的距离相同. 这样,用户在原始坐标系中定义的对象按其 自然形状 显示.
生成了一个对应于正六边形的图形对象. 用缺省设置 AspectRatio -> Automatic ,最终显示区域的纵横比由原始坐标系确定,并且该六边形按其 自然形状 显示:
有些时候直接给定图形元素的显示坐标会更方便. 要做到这一点,可以使用尺度坐标 Scaled [ { sx , sy } ] 而非 { x , y } . 尺度坐标在 方向上的变化范围均是从 0 到 1,原点选在图形范围的左下角.
ImageScaled [ { sx , sy } ]
显示区域上的尺度坐标
使用 Scaled 尺度坐标,矩形中心在原点,也在指定画图范围的中心:
使用 ImageScaled 坐标,矩形恰好在图形的中心,但不与绘图范围的中心重合:
使用 { x , y } Scaled [ { sx , sy } ] 或者 ImageScaled [ { sx , sy } ] ,用户或者完全用原始坐标或者完全适用尺度坐标来定位. 然而有时会需要混合使用这些坐标系. 例如,用户想要在某一点处画一条线,而线段长度与图形宽度成一定比例,这就需要使用原始坐标指定线的基本位置,而用尺度坐标来指定其长度.
Scaled [ { dsx , dsy } , { x , y } ] 可用于指定一个用原始和尺度坐标共同确定的位置. 这种情况下, { x , y } 用原始坐标给出位置,而 { dsx , dsy } 用尺度坐标给出从该位置算起的偏距.
Circle [ { x , y } , Scaled [ sx ] ]
半径以图形范围的宽度加刻度的圆环
Disk [ { x , y } , Scaled [ sx ] ]
半径以图形范围的宽度加刻度的圆盘
FontSize -> Scaled [ sx ]
字体大小以图形范围的宽度加刻度
Scaled 可用于单一自变量的一些场合.
Scaled [ { sdx , sdy } , { x , y } ]
从原始坐标的尺度偏距
ImageScaled [ { sdx , sdy } , { x , y } ]
从原始坐标的图像尺度偏距
Offset [ { adx , ady } , { x , y } ]
从原始坐标的绝对偏距
Offset [ { adx , ady } , Scaled [ { sx , sy } ] ]
从尺度坐标的绝对偏距
Offset [ { adx , ady } , ImageScaled [ { sx , sy } ] ]
从图像尺度坐标的绝对偏距
可以在 Circle 内部使用 Offset , 仅用一个自变量画出绝对半径为一定值的圆环:
Offset [ { adx , ady } , position ] 允许用户通过给出用原始坐标或尺度坐标定义的绝对偏距来指定对象的位置. 偏距的单位以打印机的点表示,等于 英寸.
使用尺度坐标,用户可以用显示区域的尺寸来定义图形元素的大小. 然而,用户不能告诉 Wolfram 语言某一特定图形元素的实际物理尺寸. 当然,尺寸最终取决于用户的图形输出设备,而不能由 Wolfram 语言来决定. 尽管如此,在 "图形指令和选项" 中所讨论的 AbsoluteThickness 等图形指令能够用于给出某一特定图形元素的 绝对尺寸 . 这种方式下定义的尺寸会被大部分、但不是全部输出设备所采用. (例如,对图形进行光学投影时,不可能也不需要保持其中图形基元的绝对尺寸.)
Axes -> { False , True }
画出 轴,不画
AxesOrigin -> Automatic
自动选择坐标轴的交点
AxesOrigin -> { x , y }
指定交点
AxesStyle -> style
同时指定坐标轴的风格
AxesStyle -> { xstyle , ystyle }
分别指定各坐标轴的风格
AxesLabel -> None
不给坐标轴标记
AxesLabel -> ylabel
坐标轴标记
AxesLabel -> { xlabel , ylabel }
坐标轴同时标记
Automatic
自动标刻度
{ x 1 , x 2 , }
在指定位置标刻度
{ { x 1 , label 1 } , { x 2 , label 2 } , }
用指定标记标刻度
{ { x 1 , label 1 , len 1 } , }
用指定长度标刻度
{ { x 1 , label 1 , { plen 1 , mlen 1 } } , }
在正负方向用指定长度标刻度
{ { x 1 , label 1 , len 1 , style 1 } , }
用指定风格标刻度
func
作用于 x min x max 以得到刻度选项的函数
Frame -> True
画出围绕图形的框架
FrameStyle -> style
指定框架的风格
FrameStyle -> { { left , right } , { bottom , top } }
指定框架中每条边的风格
FrameLabel -> None
框架无标记
FrameLabel -> { { left , right } , { bottom , top } }
在框架边缘给出标记
RotateLabel -> False
不转动标记中的文本
FrameTicks -> None
在框架边缘画刻度
FrameTicks -> Automatic
自动给出刻度位置
FrameTicks -> { { left , right } , { bottom , top } }
给框架边缘指定刻度
选项 Axes 可在图中画出一对坐标轴. 但有时会需要在整个图形周围显示刻度. 选项 Frame 可以画出对应于图形框架四条边的四个坐标轴.
GridLines -> None
无网格线
GridLines -> Automatic
自动给出网格线的位置
GridLines -> { xgrid , ygrid }
类似于刻度指定网格线
"重画和组合图形" 一节中讨论了如何用 GraphicsGrid 产生规则的图形阵列. 用户也可以使用 Inset 图形基元以任意方式进行图形复合和叠加.
Inset [ obj pos ]
指定在图形中的 pos 位置插入
Inset [ obj , pos opos size ]
按给定尺寸画出对象,使 obj 上的点 opos 在图形的点 pos 处.
Inset [ obj , pos opos size dirs ]
指定插入单元的轴要延 dirs 方向
Wolfram 语言可以在 Inset 中随意画出 2D 或 3D 的图形、单元格以及文字. 通常图形对象显示区域的尺寸被设置为至少与 Inset 的一对边重合.
DensityPlot [ f , { x , x min , x max } , { y , y min , y max } ]
画出 f 的密度图
ContourPlot [ f , { x , x min , x max } , { y , y min , y max } ]
画出 x y 的函数 f 的等高图
ColorFunction Automatic
使用什么颜色给阴影上色; Hue 使用一系列色彩
Mesh None
是否画出网格
PlotPoints Automatic
在各个方向上初始采样点的个数
MaxRecursion Automatic
递推分割步骤的最大次数
DensityPlot 的一些选项.
个性化颜色函数的一个重要的资源是 ColorData 函数. ColorData 提供了许多个性化的色彩集,可以直接被 ColorFunction 使用.
可以通过使用 ColorData 调用的一个颜色梯度列表:
DensityPlot 与上面的图形完全相同,但使用的颜色梯度是 "SolarColors"
画出函数的等高线图:
ColorFunction Automatic
使用什么颜色给阴影上色; Hue 使用一系列色彩
Contours Automatic
等高线的个数,或者是等高线的 z 值列表
PlotRange { Full , Full , Automatic }
所包括值的范围; 可以指定 { z min , z max } All Automatic , 或者一个列表 { xrange , yrange , zrange }
ContourShading Automatic
如何给各个区域上阴影; None 使各个区域空白,或者提供一个颜色列表
PlotPoints Automatic
在各个方向上初始采样点的个数
MaxRecursion Automatic
递推分割步骤的最大次数
ContourPlot 的一些选项.
DensityPlot ContourPlot 使用适应性的算法,把绘图区域分成小块,以便得到更多的采样点,从而画出更平滑的函数图形. 由于采样点数总是有限的,所以有时可能造成函数特征的丢失. 在必要时可以通过增大 PlotPoints MaxRecursion 选项的值来增加采样点数.
需要注意的一点是,函数值在某一区域变化过快会可能造成 Plot 生成的曲线不准确,然而函数值在某一区域变化过慢则会造成 ContourPlot 生成的等高线的形状错误. 一个快速变化的函数给定等高线的常规形式,但函数如果过于平缓则会给出不规则的等高线. 通常可以通过增大 PlotPoints MaxRecursion 来解决这一问题.
Point [ { x , y , z } ]
坐标为 x y z 的点
Line [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } , } ]
通过点 { x 1 , y 1 , z 1 } { x 2 y 2 z 2 } 的折线
Polygon [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } , } ]
有给定顶点列表的填充的多边形
Cuboid [ { x min , y min , z min } , { x max , y max , z max } ] Arrow [ { pt 1 , pt 2 } ]
pt 1 指向 pt 2 的箭头
Text [ expr , { x , y , z } ]
在位置 { x y z } 处的文本 (参见 " 文本中的图形基元 ")
三维图形元素.
Point [ { pt 1 , pt 2 , } ]
pt 1 pt 2 等点组成的复点
Line [ { line 1 , line 2 , } ]
line 1 line 2 等线组成的复线
Polygon [ { poly 1 , poly 2 , } ]
poly 1 poly 2 等多面体组成的复多边形
rantricoords 仅仅定义一个随机三角形的坐标:
使用 Polygon 复合坐标系,高效地表示出大量的三角形:
Cone [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } } ]
底部以 { x 1 , y 1 , z 1 } 为圆心,半径为1,顶点在 { x 2 y 2 z 2 } 的圆锥体
Cone [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } } , r ]
半径为 r 的圆锥
Cuboid [ { x , y , z } ]
对角坐标为 { x y z } { x + 1 y + 1 z + 1 } 的单元立方体
Cuboid [ { x min , y min , z min } , { x max , y max , z max } ]
对角具有指定坐标的立方体 (长方体)
Cylinder [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } } ]
端点坐标为 { x 1 y 1 z 1 } { x 2 y 2 z 2 } ,半径为 1 的圆柱体
Cylinder [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } } , r ]
半径为 r 的圆柱体
Sphere [ { x , y , z } ]
圆心为 { x y z } 的单位圆
Sphere [ { x , y , z } , r ]
半径为 r 的球面
Tube [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } , } ]
连接指定点的管
Tube [ { { x 1 , y 1 , z 1 } , { x 2 , y 2 , z 2 } , } , r ]
半径为 r 的管
尽管 Cone Cylinder Sphere Tube 能画出高质量的图形, 其用途却是可以调整的. 一幅图像可以包含成千的基元. 在画这些图形基元时,可以通过一些特殊选项,改变默认设置下 Cone Cylinder Sphere Tube 的点数, 从而提高画图效率. Graphics3D 中的 "ConePoints" Method 选项用于降低每个圆锥的图像质量. 相似地,圆柱体、球体和管体的图像质量也可以分别通过 "CylinderPoints" "SpherePoints" "TubePoints" 来调整.
与二维相同,可以使用 PointSize Thickness Dashing 令 Wolfram 系统去产生 Point (点)和 Line (线)元素. 要注意在三维情形下, 出现在这些指令中的长度按图形显示区域的总宽度比例来度量.
在三维图形中, Point (点)和 Line (线)的色彩设置指令与二维时相同. 而对于 Polygon (多边形)来说,色彩设置指令在两种情形时有所不同.
在二维图形中,多边形总有一个由 RGBColor Opacity 等图形指令直接指定的内在色彩. 而在三维图形中,Wolfram 系统是在模拟亮度基础上更加物理化的方式来生成多边形的色彩. 多面体仍有一个由色彩指令指定的内在色彩,但绘制这些图形时所观察到的最终色彩可能会根据各多边形上光度值的不同而不同. 默认设置下,各多边形的内在色彩是白色.
FaceForm [ gfront , gback ]
对每个多边形的前面使用 gfront 图形指令 , 对其后面使用 gback 图形指令
Wolfram 语言画三维图形时,总要在外边加一个立方盒. 在默认设置 Boxed -> True 下,Wolfram 语言会画出盒子的边缘. 但一般情况下,Wolfram 语言会自动擦去该立方盒之外的任何部分.
选项 PlotRange 指定 Wolfram 语言应该包括在盒内 坐标的范围. 与二维时相同,默认设置是 PlotRange -> Automatic ,令 Wolfram 语言用内部算法尽量包含图形中 令人感兴趣 的部分,而擦掉外围部分. 使用 PlotRange -> All ,令 Wolfram 语言包含所有部分.
通过设置 PlotRange ,星状20面体的许多部分由于位于立方盒之外而被擦去:
与二维情况类似,可以使用 原始 尺度 坐标在三维对象中确定元素的位置. 由 Scaled [ { sx sy sz } ] 确定的尺度坐标,在每一个方向上的取值范围是从 0 到 1. 坐标系在盒子上为右手系.
BoxRatios -> { xr yr zr }
指定盒子的边长比
BoxRatios -> Automatic
从实际坐标范围确定边长比( Graphics3D 的默认值 )
"三维曲面绘图" 一节中已经给出了这个选项的常用设置. 然而通常可以让 Wolfram 语言取任意视点.
视点用 ViewPoint -> { sx sy sz } 指定. si 的值用一个特殊的坐标系给出,该坐标系的原点在盒子的中心 { 0,0,0 } ,而将盒子最长的一个边作为一个单位来度量,盒子的其他边长由选项 BoxRatios 的设置确定. 对一个正立方盒子而言,每个边的坐标都是从 变化. 要注意视点总在盒子之外.
视点接近盒子的一个顶点时得到的图形:
ViewPoint { 1.3,-2.4,2 }
尺度坐标系中的观察点
ViewCenter Automatic
尺度坐标系中出现在最终图形中心的点
ViewVertical { 0,0,1 }
尺度坐标系中出现在最终图形中的竖直方向
ViewAngle Automatic
模拟相机用于观察图形的开放半角
ViewVector Automatic
模拟相机在图形常规坐标系中的位置和方向
ViewCenter 允许用户告诉 Wolfram 语言对象的哪一点应该在最终图形的中心. 这一点由尺度坐标给出,各方向盒子的边从0到1变化. 用 ViewCenter -> { 1/2,1/2,1/2 } ,盒子的中心将出现在最终图形的中心. 由于不同视点的选择,盒子不一定对称,盒子的中心不一定在最终图形的中心. 可以用 ViewCenter -> Automatic 使盒子中心在最终图形区域的中心.
ViewVertical 指定对象的哪一个方位应该在最终图形中指向上方. ViewVertical 用尺度坐标指出那一个方向应该在最终图形上竖直向上. 默认设置 ViewVertical -> { 0,0,1 } ,使得原始坐标的 方向在最终图形中总是竖直向上.
Wolfram 语言利用模拟相机的性能来对最终图像制造视觉影象. 对象的位置,观察的取向,以及相机的朝向由选项 ViewCenter ViewVertical ViewPoint 来确定. 选项 ViewAngle 指定相机镜头的开放宽度. 选项 ViewAngle 用弧度指定相机观测到的从 ViewPoint ViewCenter 的线的最大角度的两倍. 有效视角是 ViewAngle 值的两倍. 这表明 ViewAngle 可以有效地对图像某一部分进行放大. ViewAngle 的默认值是35 ° ,这是人眼的通常视角.
ViewVertical 的这种设置使盒子的 轴方向在图形上竖直向上:
设置选项 ViewPoint ViewCenter ViewVertical ,也就是确定怎样观察一个物理对象. ViewPoint 确定头相对于对象的位置. ViewCenter 确定观察位置. ViewVertical 确定头向上的方式.
用坐标系的术语来说,设置 ViewPoint ViewCenter ViewVertical 就是确定如何把盒子上的三维坐标转换为最终显示区域中图形的坐标.
ViewVector -> Automatic
使用 ViewPoint ViewCenter 选项的值确定模拟相机的位置和朝向
ViewVector -> { x y z }
对象所用相机在坐标系中的位置; 相机的朝向由 ViewCenter 选项决定
ViewVector -> { { x y z } { tx ty tz } }
对象所用相机在坐标系中的位置及相机的焦点
相机的位置和朝向可完全由选项 ViewPoint ViewCenter 确定,但选项 ViewVector 提供了一个有用的推广. 不是用尺度坐标给出相机的位置和朝向, ViewVector 使用与定位图形内部对象相同的坐标系对相机进行定位.
相机位置相同但指向不同方向. 与 ViewAngle 配合使用,这里对图形某一部分进行放大:
当获得了三维对象的二维映像后,还存在如何生成图像的问题,这与二维图形中的问题相同. 例如,可以通过改变纵横比 AspectRatio 来修改图形的最终形状,通过设置选项 PlotRegion 来指定图形的整个显示区域.
在显示屏的平面上平移图形
交互性的修改图形时,Wolfram 语言对这些观察选项做出改变. 如果用户用 ViewPoint 指定了相机的位置,旋转图形会使 Wolfram 语言改变选项 ViewPoint 的值. 如果相机的位置由 ViewVector 指定,旋转图形则会改变这个选项的值. 两种情况下,图形的旋转都会影响选项 ViewVertical 的值. 交互性的对图形放大和收缩则会直接影响到选项 ViewAngle . 交互性的平移图形改变的是选项 ViewCenter 的值.
Wolfram 语言通常缩放三维对象的图形,使其在给定的显示区域中尽可能大. 尽管在大部分情况下这正是用户所需要的,但会产生一个所画出的三维对象的尺寸会随着定位不同而变化的结果. 可以通过设置选项 SphericalRegion -> True 来避免出现这种变化. 在这种设置下,Wolfram 语言在三维边界盒子外侧放一个球面,并调整最后的图形使得整个球面在所指定的显示区域之内. 这个球面的中心与边界盒子的中心重合,并且恰好把边界盒子放在球面内.
使用 SphericalRegion -> True ,调整最后的图像使得边界盒外的球面整个落在显示区域内:
通过设置 SphericalRegion -> True 可以使一个对象的调整和这个对象的所有定位相一致,这对产生同一对象不同定位的动态序列是很有用的.
{ "Ambient", color }
均一环境光线
{ "Directional", color { pos 1 pos 2 } }
与从 pos 1 指向 pos 2 的向量平行的定向光线
{ "Point", color pos }
在位置 pos 的球形点光源
{ "Spot", color { pos tar } α }
在位置 pos ,指向目标位置 tar ,开放为半角 α 的点光源
Lighting -> { light 1 light 2 }
一定数量的光线
Lighting 作为 Graphics3D Show 的一个选项使用时, 其控制着同一场景下所有对象的光照. Lighting 也可以用作图形指令来指定特定对象的光照. 指令 Lighting 取代固有的光照设定.
指令 Lighting 取代 Lighting 后面定义的两个球体的默认设置:
这个例子使用列表使得 Lighting 指令仅作用于中间的球体:
而使用 RGBColor Specularity Glow 可以定义更复杂的模型. 这些指令分别指定三种光射: 漫反射 镜面反射 发光 .
在 Wolfram 语言中,可以任意组合使用漫反射、镜面反射和发光指令. 想要去除某一种反射,相应地给出内在颜色为 Black 或者 GrayLevel [ 0 ] . 对于相当白的材料,可以指定内在颜色为 GrayLevel [ a ] ,其中 a 是这个曲面的反射能力或反射率.
GrayLevel [ a ]
反射率为 a 的暗淡表面
RGBColor [ r g b ]
有内在颜色的暗淡表面
Specularity [ spec n ]
镜面反射率为 spec 、镜面反射指数为 n 的曲面; spec 为0到1之间的数或者是一个 RGBColor 的定义
Glow [ col ]
采用发光颜色 col 的发光表面
Wolfram 语言提供了各种标记三维图形的选项. 其中一些选项与 "二维图形的标记" 一节中所讨论的二维图形的选项相同,另一些则不同.
Boxed -> True
图形外面画一个立方盒(默认)
Axes -> True
在盒子边缘画 坐标轴
Axes -> { False False True }
仅画 坐标轴
FaceGrids -> All
在盒子表面画网格线
PlotLabel -> text
给图形一个总标记
Graphics3D 的默认值是画出盒子,但没有其他标记:
设置 Axes -> True 添加了 坐标轴:
BoxStyle -> style
指定盒子的风格
AxesStyle -> style
指定坐标轴的风格
AxesStyle -> { xstyle ystyle zstyle }
对每个坐标轴分别指定风格
通过设置选项 Axes -> True ,令 Wolfram 语言在三维盒子的边上画坐标轴. 而原则上每个坐标轴可以画在四条不同的边上. 选项 AxesEdge 用来指定在哪一条边上画各个坐标轴.
AxesEdge -> Automatic
用内部算法定坐标轴的位置
AxesEdge -> { xspec yspec zspec }
对坐标轴 分别指定位置
None
不画出这个坐标轴
Automatic
自动确定这个坐标轴的位置
{ dir i dir j }
指出在四条可能边的哪一个上画这个坐标轴
AxesLabel -> None
无轴标记
AxesLabel -> zlabel
轴加标记
AxesLabel -> { xlabel ylabel zlabel }
对三个轴都加标记
可以用 AxesLabel 来标记盒子的边,而不必在其上画刻度:
Ticks -> None
不标刻度符号
Ticks -> Automatic
自动标刻度符号
Ticks -> { xticks yticks zticks }
对每个轴分别标刻度符号
用户可以使用与 "二维图形的标记" 一节中所描述的给二维图形标刻度符号的相同方式给三维图形标刻度符号.
FaceGrids -> None
表面无网格线
FaceGrids -> All
在所有表面画网格线
FaceGrids -> { face 1 face 2 }
face i 表面上画网格线
FaceGrids -> { { face 1 { xgrid 1 ygrid 1 } } }
xgrid i ygrid i 确定在各表面画网格线的位置和方式
Wolfram 语言允许用户在围绕三维对象的盒子表面画网格线. 设置 FaceGrids -> All 时,每个面上都用灰色画出网格线. 设置 FaceGrids -> { face 1 face 2 } 可令 Wolfram 语言仅在指定面画出网格线. 每个面由一个列表 指定,其中前两个 必须为 0 , 而第三个值为 +1 -1 . 对于每个面,可用与二维图形选项 GridLines 相同的指定方式明确告诉 Wolfram 语言画网格线的位置和方式.
Point [ { pt 1 pt 2 } ]
由点 pt 1 pt 2 组成的复点
Line [ { line 1 line 2 } ]
由线 line 1 line 2 组成的复线
Polygon [ { poly 1 poly 2 } ]
由多边形 poly 1 poly 2 组成的复多边形
GraphicsComplex [ { pt 1 pt 2 } data ]
复合图形,在 data 中的图形基元的整数坐标 i 被视为 pt i
当多个基元共享同一坐标数据时,例如在网格或图形中,使用 GraphicsComplex 可去除重复坐标数据而使效率进一步提高. Wolfram 语言的曲面和图形绘制函数通常采用这种表示形式.
GraphicsComplex 不仅可以提高效率,而且在与用户交互方面也很有用. 拥有共用坐标的基元,在其中一个被拖动时始终保持连在一起.
由于 GraphPlot 的输出是 GraphicsComplex 他 图形的任何一部分被拖动时他 图形始终保持连接 :
任何基元都可以在 GraphicsComplex 内使用,而 GraphicsComplex 可以用于 2D 或 3D 图形. 在 GraphicsComplex 内,基元的坐标位置被 GraphicsComplex 中坐标数据的指标所取代.
GraphicsComplex 复合了多种形式的基元:
GraphicsComplex 在表示多边形网格时尤其有用. 使用 GraphicsComplex ,能够避免出现由数值误差所造成的相邻多边形之间的间隙.
FontSlant ->"Italic"
用斜体
FontWeight ->"Bold"
用粗体
FontFamily ->" name "
指定字体族名称 (如 "Times" "Courier" "Helvetica"
BaseStyle 设置中的典型元素.
在标准的 Wolfram 语言笔记本前端,可以将 BaseStyle 设置成当前笔记本样式表中所定义的风格名称. 也可以用选项 FontSize FontFamily 来明确指定文本格式. FontSize 给出的是字体的绝对尺寸, 单位为打印点,1点等于 英寸. 在改变图形的尺寸时, 如果字体尺寸是用数字表示的,那么图形中的文本不会自动改变尺寸,要得到不同大小的文本,必须给选项 FontSize 明确指定一个新值. 如果字体尺寸是以比例量度给出的,那么随着图形尺寸的改变,字体也会按比例缩放. 使用 FontSize -> Scaled [ s ] ,实际字体尺寸将是图形中 s 个比例单位.