不懂是啥,算笔记吗,意识流产物

在代码里实现简陋的物理效果 🥹

我还记得的牛顿力学物理公式

S=v0t+12at2S=v_0t+\frac12at^2

G=mgG=mg

H=12g2tH=\frac12g^2t

δS=vt\delta{S}=vt

离散的解决方案

不严谨的说就是积分的过程,希望它能有点效果。

给物体上一个速度

我思考,如果在代码里实现速度与位移的关系,vtvt可以简化为常数iivt=ivt=i,因为单位时间δt\delta{t}基本上就是一次循环遍历,那么直接用常数表示δS=i\delta{S}=i。所以在恒速下,一个物体在单位时间δt\delta{t},产生位移可以直接变成自增操作S=S+iS=S+i

给物体上一个加速度

事实上,给速度求导得到的物理意义就是加速度,那当然可以使用类似的定义——atat简化为常数jj,速度的变化操作就可以直接表示为V=V+jV=V+j

物体的位移

假设在所有事件里加速度只会突变(比如整型的变化),那么在同一方向上的位移可以表示成:

S=S+vS=S+v

v=v+av=v+a

v=xv=x

a=ya=y

x,yZx, y \in Z

using Plots

x = range(1, 100, 100);
a = fill(1, 100);
v = cumsum(a);
S = cumsum(v);
plot(x, [a, v, S], label=["a" "v" "S"]);
ylims!(0, 200)

图像:

image

可以看到位移确实呈二次图像,那么初步确定这个方案可行。

如果后面出现不合适的地方还会返回修改方案的,现在是 20230803

再来试试看带有初速度的位移,同一个方向没什么好说的,初始速度为反方向呢。

using Plots

time = 30;
v0 = -10;
x = range(0, time, time);
a = fill(1, time);
v = fill(0, time) + a;
v[1] = v0;
v = cumsum(v);
S = cumsum(v);

plot(x, [a, v, S], label=["a" "v" "S"]);
ylims!(-60, 60);
xlims!(0, 30)

image

可以看到时间到 22 左右的时候,位移重新降回零,这个二次的曲线就是我想要的效果,但是实际运用时或许可以考虑乘上一个系数来放缩一下,要不然效果可能变得太夸张。

基于这个离散方案实现其他复杂的物理效果

既然基础的运动事件是可行的,那么可以尝试分析一下更加复杂的!我能力有限就能到哪算哪吧 💩。

// TODO