这个是很有用的一个问题。
以下面的代码为例:
h=ParametricPlot3D[{-(1/12) E^(-4 ((-(18/E)+18 y)^2+81 (-1+1/4 Sqrt[1+16 z^2])^2)^2)+3 E^(-13/10 Abs[-1+1/4 Sqrt[1+16 z^2]]^2) y Log[y],z,y},{y,0,1},{z,-2,2},BoxRatios->{1,3.4,1.7},Boxed->False,Axes->None,Mesh->None,ColorFunction->RGBColor[230/256,200/256,190/256],PlotStyle->Directive[RGBColor[240/256,200/256,190/256],Opacity[1],Specularity[White,10]],PerformanceGoal->"Quality",PlotPoints->50,ViewPoint->{-1,-1.7,.3},PlotTheme->{"Classic",Lighting->"Neutral"}]
初始的观察点 ViewPoint->{-1,-1.7,0.3}
如果想通过交互方式调整之后,获取调整后的ViewPoint,则首先把获得的句柄中的ViewPoint选项赋值给一个新变量:
vp = Options[h, ViewPoint][[1, 2]]
ParametricPlot3D[{-(1/12) E^(-4 ((-(18/E)+18 y)^2+81 (-1+1/4 Sqrt[1+16 z^2])^2)^2)+3 E^(-13/10 Abs[-1+1/4 Sqrt[1+16 z^2]]^2) y Log[y],z,y},{y,0,1},{z,-2,2},BoxRatios->{1,3.4,1.7},Boxed->False,Axes->None,Mesh->None,ColorFunction->RGBColor[230/256,200/256,190/256],PlotStyle->Directive[RGBColor[240/256,200/256,190/256],Opacity[1],Specularity[White,10]],PerformanceGoal->"Quality",PlotPoints->50,ViewPoint->Dynamic[vp],PlotTheme->{"Classic",Lighting->"Neutral"}]
此图可以用于鼠标交互调整视角。
然后另起一行输入:
Dynamic[vp]
此时,交互调整上面所画的图片的方位时,Dynamic[vp]的输出值会随之而动态变化。
Dynamic真是一个神奇的命令。 ——这里图片我就不画了。
而链接中自定义函数也可以,但是图片作为输入变量时候偏小,看着不直观:
ExtrahiereViews[ll_]:=Flatten[Union[Extract[ll,Position[ll,#]]&/@{ViewPoint->_,ViewCenter->_,ViewVertical->_,ViewAngle->_,ViewVector->_,ViewRange->_}]]