【Mathematica】绘制曲线曲率圆圆心的轨迹
1、假设曲线的参数方程是r[t],先求出曲线的【单位切向量】:
qie[t_] := Evaluate[D[r[t], t]/Sqrt[D[r[t], t].D[r[t], t]] // FullSimplify]
对参数方程求导,得到切向量,再归一化处理,才是单位切向量。

2、再求曲线的单位法向量:
对【单位切向量】求导,得到法向量;
对法向量进行归一化处理,得到单位法向量。
dr[t_] := Evaluate[D[qie[t], t]]
fa[t_] := Evaluate[dr[t]/Sqrt[dr[t].dr[t]] // FullSimplify]
注意,一定是对【单位切向量】求导才能得到法向量,而如果直接对r[t]的导数求导,得到的一般不是法向量。

3、曲率半径是曲率的倒数:
qulvr[t_] := 1/ArcCurvature[r[t], t]
曲率中心,就是在法向量的方向上:
qulvzx[t_] := Evaluate[r[t] + qulvr[t]*fa[t]]

4、再把曲率圆画出来:
Circle[qulvzx[tt], qulvr[t] /. t -> tt]
这里要遵守一个求导原则:先求导,在赋值。
否则机器会报错。

5、然后把曲率圆圆心轨迹画出来。
这个轨迹曲线的参数方程,恰恰就是qulvzx[t]。
ParametricPlot[qulvzx[t], {t, 0, 2 Pi}, PlotStyle -> RGBColor[1, 0, 1]]
而原曲线的参数方程是r[t_] := (Sin[2 t]) {Cos[t], Sin[t]}。

6、更换原曲线的参数方程:
r[t_] := (Sin[3 t]) {Cos[t], Sin[t]}
这是一条三叶玫瑰线。

7、三叶玫瑰线的极坐标方程,加上一个正数,会“膨胀”起来:
r[t_] := (1/3 *(2 + Sin[3 t])) {Cos[t], Sin[t]}

8、当曲率中心完全位于闭曲线内部,且曲线是简单曲线,那么这条曲线一定是凸曲线:
r[t_] := (1/21 (20 + Sin[3 t])) {Cos[t], Sin[t]}

9、再试试它:
(1/51 (50 + Sin[5 t])) {Cos[t], Sin[t]}

10、如果一条平面闭曲线,本身不是简单曲线,就一定不是凸曲线。
(1/2 (1 + Sin[2 t])) {Cos[t], Sin[t]}
