void add_body_force_xyz(xyz_t p0, xyz_t p1, double mass, xyz_t *acc) // adds the force from p1's mass to p0's acceleration { double dbb2, dbb; double fmag; dbb2 = hypot_xyz2(p0, p1); dbb = sqrt(dbb2); fmag = mass / dbb2; *acc = add_xyz( *acc, div_xyz( mul_xyz(set_xyz(fmag), sub_xyz(p1, p0)) , set_xyz(dbb)) ); }
void physical_integration_xyz(xyz_t *pos, xyz_t *vel, xyz_t acc, double dt) { enum { meth_euler, meth_rk2, meth_rk4 }; const int method = meth_euler; double xo, yo, ax0, ax1, ax2, ay0, ay1, ay2, hvx, hvy; xyz_t po, a0, a1, a2, hv; // f(t) = vx, vy at t if (method==meth_euler) { // Euler method: pn+1 = pn + dt * f(tn+1) *vel = add_xyz(*vel, mul_xyz(set_xyz(dt), acc)); // f(xn+1) *pos = add_xyz(*pos, mul_xyz(set_xyz(dt), *vel)); // xn+1 = xn + dt * (fxn+1) } if (method==meth_rk2) { po = *pos; hv = add_xyz(*vel, mul_xyz(acc, set_xyz(0.5*dt)) ); *pos = add_xyz(*pos, mul_xyz(*vel, set_xyz(0.5*dt)) ); *vel = add_xyz(*vel, mul_xyz(acc, set_xyz(dt)) ); *pos = add_xyz(po, mul_xyz(hv, set_xyz(dt)) ); } }
int main(void) { struct xyz sa; set_xyz(&sa, 50, 99999999L, 3.14); printf("sa.x = %d\n", sa.x); printf("sa.y = %ld\n", sa.y); printf("sa.z = %f\n", sa.z); return 0; }
int main(void) { // saはstruct xyz型のオブジェクト struct xyz sa; int x=0; long y=0; double z=0.f; // 値の代入 scanf("%d",&x); scanf("%ld",&y); scanf("%lf",&z); set_xyz(&sa,x,y,z); // メンバの値を表示 printf("sa.x = %d\n", sa.x); printf("sa.y = %ld\n", sa.y); printf("sa.z = %f\n", sa.z); return (0); }
void draw_active_block(V3i p) { GLfloat va[28 * 3] = {0}; float n = BLOCK_SIZE / 2.0f; float x = (float)p.x * BLOCK_SIZE; float y = (float)p.y * BLOCK_SIZE; float z = (float)p.z * BLOCK_SIZE_2; set_xyz(va, 2, 0, 0, x, y, 0); set_xyz(va, 2, 0, 1, x, y, z); set_xyz(va, 2, 1, 0, x, y, (float)(p.z + 1) * BLOCK_SIZE_2); set_xyz(va, 2, 1, 1, x, y, (float)MAP_Z * BLOCK_SIZE_2); /*vertical lines*/ set_xyz(va, 2, 2, 0, x - n, y - n, z); set_xyz(va, 2, 2, 1, x - n, y - n, z + n * 4); set_xyz(va, 2, 3, 0, x + n, y - n, z); set_xyz(va, 2, 3, 1, x + n, y - n, z + n * 4); set_xyz(va, 2, 4, 0, x + n, y + n, z); set_xyz(va, 2, 4, 1, x + n, y + n, z + n * 4); set_xyz(va, 2, 5, 0, x - n, y + n, z); set_xyz(va, 2, 5, 1, x - n, y + n, z + n * 4); /*bottom*/ set_xyz(va, 2, 6, 0, x - n, y - n, z); set_xyz(va, 2, 6, 1, x + n, y - n, z); set_xyz(va, 2, 7, 0, x + n, y - n, z); set_xyz(va, 2, 7, 1, x + n, y + n, z); set_xyz(va, 2, 8, 0, x + n, y + n, z); set_xyz(va, 2, 8, 1, x - n, y + n, z); set_xyz(va, 2, 9, 0, x - n, y + n, z); set_xyz(va, 2, 9, 1, x - n, y - n, z); /*top*/ set_xyz(va, 2, 10, 0, x - n, y - n, z + n * 4); set_xyz(va, 2, 10, 1, x + n, y - n, z + n * 4); set_xyz(va, 2, 11, 0, x + n, y - n, z + n * 4); set_xyz(va, 2, 11, 1, x + n, y + n, z + n * 4); set_xyz(va, 2, 12, 0, x + n, y + n, z + n * 4); set_xyz(va, 2, 12, 1, x - n, y + n, z + n * 4); set_xyz(va, 2, 13, 0, x - n, y + n, z + n * 4); set_xyz(va, 2, 13, 1, x - n, y - n, z + n * 4); glColor3f(0, 0, 1); glVertexPointer(3, GL_FLOAT, 0, va); glDrawArrays(GL_LINES, 0, 28); }