Beispiel #1
0
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)) );
}
Beispiel #2
0
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)) );
	}
}
Beispiel #3
0
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;

}
Beispiel #4
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);
}
Beispiel #5
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);
}