也许这里有人有看过我在 Math 版回答问题时附的图
这种图我都是直接开 Mathematica 起来作图的
毕竟这方面它是专家 XD
(虽然最近会用 Geogebra 作一些几何相关的图就是了)
最近一个在 Math 版贴的成品是这个
http://w.csie.org/~b94102/math/Math66.gif
关于这张图的前情提要可见 Math 版 #1J0pkzzR 以及其回应
以下来分享的则是我这张图的作图过程及心得 XD
最终产生图的程式码如下:
Table[
Show[{
ParametricPlot3D[
{5 Cos[θ-φ], 5 Sin[θ-φ], -5 Sqrt[35]}/Sin[(Pi+θ)/6],
{θ, 0, 4 Pi}, PlotStyle -> {Green}],
Graphics3D[{
Opacity[0.3], Red, Cone[{{0, 0, -10 Sqrt[35]}, {0, 0, 0}}, 10],
Opacity[1], Lighter[Yellow],
Line[{{0, 0, 0}, {10 Cos[-φ], 10 Sin[-φ], -10 Sqrt[35]}}],
Black, PointSize[.03],
Point[{5/2, -((5 Sqrt[3])/2), -5 Sqrt[35]}/Sin[Pi/9 + φ/6]]
}]
},
PlotRange -> {{-10, 10}, {-10, 10}, {-10 Sqrt[35], 0}},
Boxed -> False, Axes -> False, ImageSize -> 300],
{φ, Pi/3, 13 Pi/3, Pi/8}]
Export["Math66.gif", %,
"DisplayDurations" -> Join[{1.4}, Table[0.1, {32}]],
AnimationRepetitions -> Infinity]
其实程式码不长, 不过中间很多东西其实都是先算好才写死进去的
例如绿线的参数式, 那是我从原题的答案里先求得在展开图上那条直线的极座标式
把角度θ放大到 0 ~ 4 Pi (两圈) 再把它“贴”到圆锥面上来的
(算是一点点题外话: θ跟φ其实都可以用键盘快速输入
主要是用两个 ESC 的三点包住缩写可以打出希腊字母及一些运算符号
而且不少字都有不只一种这种打法
像是 [ESC]q[ESC], [ESC]th[ESC], [ESC]theta[ESC] 都可以输入θ
[ESC]f[ESC], [ESC]ph[ESC], [ESC]phi[ESC] 都可以输入φ
我自己在用时都是打一个字母的这样比较快 XD
大家常用的 BasicInput 输入盘上当你指到字时会告诉你这字可以怎么用这方法输入)
还有就是这段程式码里其实动的不是视角, 而是所有线的位置
(外圈 Table 的参数φ就是类似“相位角”的东西) (所以才叫φ XD)
会这样写其实是因为我一直搞不懂 Viewpoint 的计算方式 (炸)
所以既然视角不动我只好让其它东西转 XD
也由于视角是默认视角的关系, φ其实不是 0 到 4 Pi 而是平移了 Pi/3
这样起点才会大致在正前方
(应该不是很正的正前方, 因为可以看到起始时黄线小小歪了一点;
这 Pi/3 的数字也是调整来的, 原本猜是 Pi/4 结果发觉不够,
0.3 Pi 还是没能摆正, 于是干脆试 Pi/3 结果竟然大致摆正了 XD)
圆锥用上 Opacity 一来是较好掌握绿线的长相
二来其实主因是我在画黑点时因为黑点在圆锥面上, 加上视点的关系
画出来时黑点一半被圆锥埋住了 XD
原本想要让黑点跑出来一点, 但不巧因为一个计算错误差了负号, 让黑点埋到不见了
索性不移黑点反过来让圆锥变透明来解决...
另一个值得一提的点是动态 gif 的输出, 这是我前一阵子研究 Export 时才发现的
参考的说明是 ref/format/GIF 这一条
http://reference.wolfram.com/mathematica/ref/format/GIF.html
比较重要的是输出的式子要是一个图案的 List
这也就是我上面会用 Table 包起来的原因
然后只要指定 "DisplayDurations" 跟 AnimationRepetitions 就会输出动态 gif 了