乗車日記

自転車ときのこ

プログラム

Macwiki様の3次元ベクトルクラスを使わせていただいています。
http://macwiki.sourceforge.jp/wiki/index.php/Vector3%E3%82%AF%E3%83%A9%E3%82%B9

using namespace std;
#include<iostream>
#include<math.h>
#include<stdio.h>
#include"vector3.h"
#define     PI      3.141592653589793238463
#define		G		 9.80665

vector3 sig(vector3 (&R1)[3],vector3 (&R2)[3], double l){
	vector3 temp0,temp1,temp3,temp4;
	temp1=R1[1]-R2[1];
	temp0=R1[0]-R2[0];
	temp3=-k*(1.0/l-1.0/temp1.abs())*temp1;
	temp4=-g*(1-temp0.abs()/temp1.abs())/dT*temp1;
	return(temp3+temp4);
}

void main(void){
	vector3 r1[3],r2[3],r3[3];
	vector3 T12=vector3(0.0,0.0,5.0);//N/m
	int i;
	for (i=0;i<3;i++){
		r1[i]=vector3(-4.0, 0.0, 0.0);
		r2[i]=vector3( 0.0, 0.0, 0.0);
		r3[i]=vector3( 0.0, 4.0, 0.0);
	}

	double l12=(r1[1]-r2[1]).abs();
	double l23=(r2[1]-r3[1]).abs();

	long int it;
	for(it=0;it*dT<=30;it++){
		r1[2]=2.0*r1[1]-r1[0] + (sig(r1,r2,l12)+T12%(r1[1]-r2[1])) *dT*dT/m1;
		r2[2]=2.0*r2[1]-r2[0] + (sig(r2,r1,l12)+sig(r2,r3,l23)
								+T12%(r2[1]-r1[1])-T12%(r2[1]-r3[1])) *dT*dT/m1;
		r3[2]=2.0*r3[1]-r3[0] + (sig(r3,r2,l23)-T12%(r3[1]-r2[1])) *dT*dT/m3;

		for(i=0;i<2;i++){
			r1[i]=r1[i+1];
			r2[i]=r2[i+1];
			r3[i]=r3[i+1];
		}
		if (it%100==0){
			cout <<r1[1].x<<" "<<r1[1].y<<"\n";
			cout <<r2[1].x<<" "<<r2[1].y<<"\n";
			cout <<"\n"<<"\n";
			cout <<r2[1].x<<" "<<r2[1].y<<"\n";
			cout <<r3[1].x<<" "<<r3[1].y<<"\n";
			cout <<"\n"<<"\n";
		}

	}
}