请问,画质点平抛运动轨迹,碰到f[x]反弹。当f[x] = -x时穿过了,但是如果f[x] = -Cosh[x/20]就正常,哪里有问题呢
ClearAll["Global`*"]
s0 = {0, 0}; v0 = {10, 0};
a[t_] := {0, -10}
s[t_] := {x[t], y[t]}
f[x_] := -x(*f[x_]:=-Cosh[x/20]*)
\[Theta] := 2 ArcTan[f'[x[t]]] - ArcTan[y'[t]/x'[t]]
rule := Thread[s'[t] -> Norm[s'[t]] {Cos[\[Theta]], Sin[\[Theta]]}]
sol = NDSolveValue[{s''[t] == a[t], s'[0] == v0, s[0] == s0,
WhenEvent[y[t] < f[x[t]], Evaluate@rule]}, s[t],{t, 0, 3}]
Show[{ParametricPlot[sol, {t, 0, 3}], Plot[f[x], {x, 0, 1000}]},
ImageSize -> Full]
ClearAll["Global`*"]
s0 = {0, 0}; v0 = {10, 0};
a[t_] := {0, -10}
s[t_] := {x[t], y[t]}
f[x_] := -x(*f[x_]:=-Cosh[x/20]*)
\[Theta] := 2 ArcTan[f'[x[t]]] - ArcTan[y'[t]/x'[t]]
rule := Thread[s'[t] -> Norm[s'[t]] {Cos[\[Theta]], Sin[\[Theta]]}]
sol = NDSolveValue[{s''[t] == a[t], s'[0] == v0, s[0] == s0,
WhenEvent[y[t] < f[x[t]], Evaluate@rule]}, s[t],{t, 0, 3}]
Show[{ParametricPlot[sol, {t, 0, 3}], Plot[f[x], {x, 0, 1000}]},
ImageSize -> Full]