#include "TrueBASIC.h" void Euler_Richardson(double *x, double *y, double *vx, double *vy, double *t, double C, double g, double dt, double dt_2); void Euler_Richardson(double *x, double *y, double *vx, double *vy, double *t, double C, double g, double dt, double dt_2) { double ax, axmid, ay, aymid, v, v2, vmid, vmid2, vxmid, vymid, xmid, ymid; v2 = (*vx)*(*vx) + (*vy)*(*vy); v = sqrt(v2); ax = -C*v*(*vx); ay = -g - C*v*(*vy); vxmid = (*vx) + ax*dt_2; // 中点での速度 vymid = (*vy) + ay*dt_2; xmid = (*x) + (*vx)*dt_2; // 中点での位置 ymid = (*y) + (*vy)*dt_2; vmid2 = vxmid*vxmid + vymid*vymid; vmid = sqrt(vmid2); axmid = -C*vmid*vxmid; // 中点での加速度 aymid = -g - C*vmid*vymid; (*vx) += axmid*dt; (*vy) += aymid*dt; (*x) += vxmid*dt; (*y) += vymid*dt; (*t) += dt; }