在Mathematica中如何把手动调整好的最佳视角的数值固定下来?

这个是很有用的一个问题。

http://mathematica.stackexchange.com/questions/5375/extract-current-viewing-parameters-from-a-3d-view


以下面的代码为例:

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]]


然后从新用Dynamic[vp]作为ViewPoint选项的赋值,再画一遍原图(Options中唯一改变的就是ViewPoint选项):

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->_}]]



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
程序分享如何实现实时滚动条效果类Mathematica的manipulate-manipulate.m 大家知道,在MATLAB的滚动条控件是“非实时”的。所谓非实时,指的是用户在拖动滚动条时,滚动条的callback函数不会被触发,只有放开滚动条后,callback函数才会被调用一次。 但是,有的时候我们可能会有这样的需要:比如我们在窗口做出了一个y = f函数的图形,这个函数有几个参数a, b, c ... 然后我们希望通过用滚动条的形式来改变这些参数的数值,并实时地在窗口观察参数改变后的图形的结果。但直接使用滚动条控件的话,拖动滚动条时图形不会更新。想看到参数连续变化时对图形的影响,就只能一下一下地点击滚动条两端的箭头,非常繁琐。 这个功能在Mathematica下用manipulate命令就非常容易实现。但是在MATLAB下却一直没有提供具有类似功能的函数。所以我自己写了一个MATLAB的manipulate版本。当然,现在这个版本只能实现最基本的2D plot对象。至于其他类型的图形对象,我会在以后慢慢添加。 后 (或者在 http://www.mathworks.com/matlabcentral/fileexchange/36512-manipulate-interactive-parametrized-plotting 下载,帮我增加点人气) 在命令行输入 manipulate复制代码 即可看到如下图所示的界面,用户可以随意拖动滚动条,axes的内容会实时更新。 manipulate_demo.gif 实时滚动条效果演示 用户也可以使用自己给定的函数,并且可以操纵任意数目的参数,比如下列语句: manipulate*x param),[-10:10],[2 0]},{[-10 10],[-10 10]}, {1,'Slope',1 10}, {2,'Shift',-5 5})复制代码 会产生一条直线,用户可以操纵其斜率和截距。 更多使用方法请看函数自带的帮助(英文)。 欢迎提出宝贵意见。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值