level 1
Sylvanashe
楼主
求质点s的运动轨迹,当碰到f时反弹,代码:
Clear@"`*"
f[{u_, v_}] = {6 Cos[u] Sin[v], 5 Sin[u] Sin[v], 4 Cos[v]};
c = {u, v};
fxl = TrigFactor[Cross @@ (D[f[c], #] & /@ c)];
s[t_] = {x[t], y[t], z[t]};
ru = Cancel[s'[t] -> s'[t] - 2 s'[t] . fxl/fxl . fxl fxl];
s0 = {0, 0, 6};
v0 = {9, 6, 0};
a[t_] = -1000 s[t]/Norm[s[t]]^3;
cond = WhenEvent[True, tmp = Flatten@FindInstance[f[c] == s[t], c];
If[Length[tmp] > 0, ru /. tmp]];
sol[t_] =
NDSolveValue[{s''[t] == a[t], s'[0] == v0, s[0] == s0, cond},
s[t], {t, 0, 30}, AccuracyGoal -> 20, PrecisionGoal -> 20,
WorkingPrecision -> 35, MaxSteps -> \[Infinity]];
gra = Show[{ParametricPlot3D[f[c], {u, 0, 2 \[Pi]}, {v, 0, \[Pi]},
Mesh -> None, PlotRange -> 9, PlotStyle -> Opacity[.8]],
ParametricPlot3D[sol[t], {t, 0, 30}]}];
Animate[Show[{gra,
ParametricPlot3D[
sol[t] + 1/2 {Cos[u] Sin[v], Sin[u] Sin[v], Cos[v]}, {u, 0,
2 \[Pi]}, {v, 0, \[Pi]}]}], {t, 0, 30},
AnimationRunning -> False, AnimationRate -> 1, RefreshRate -> 60,
DisplayAllSteps -> True]
问题在于WhenEvent判断质点s与f相碰,当f是隐式方程时很容易判断,但是当f是参数方程时就不知道有什么高效的判断方法了,求各位大神指点
2023年12月23日 12点12分
1
Clear@"`*"
f[{u_, v_}] = {6 Cos[u] Sin[v], 5 Sin[u] Sin[v], 4 Cos[v]};
c = {u, v};
fxl = TrigFactor[Cross @@ (D[f[c], #] & /@ c)];
s[t_] = {x[t], y[t], z[t]};
ru = Cancel[s'[t] -> s'[t] - 2 s'[t] . fxl/fxl . fxl fxl];
s0 = {0, 0, 6};
v0 = {9, 6, 0};
a[t_] = -1000 s[t]/Norm[s[t]]^3;
cond = WhenEvent[True, tmp = Flatten@FindInstance[f[c] == s[t], c];
If[Length[tmp] > 0, ru /. tmp]];
sol[t_] =
NDSolveValue[{s''[t] == a[t], s'[0] == v0, s[0] == s0, cond},
s[t], {t, 0, 30}, AccuracyGoal -> 20, PrecisionGoal -> 20,
WorkingPrecision -> 35, MaxSteps -> \[Infinity]];
gra = Show[{ParametricPlot3D[f[c], {u, 0, 2 \[Pi]}, {v, 0, \[Pi]},
Mesh -> None, PlotRange -> 9, PlotStyle -> Opacity[.8]],
ParametricPlot3D[sol[t], {t, 0, 30}]}];
Animate[Show[{gra,
ParametricPlot3D[
sol[t] + 1/2 {Cos[u] Sin[v], Sin[u] Sin[v], Cos[v]}, {u, 0,
2 \[Pi]}, {v, 0, \[Pi]}]}], {t, 0, 30},
AnimationRunning -> False, AnimationRate -> 1, RefreshRate -> 60,
DisplayAllSteps -> True]
问题在于WhenEvent判断质点s与f相碰,当f是隐式方程时很容易判断,但是当f是参数方程时就不知道有什么高效的判断方法了,求各位大神指点