Example #1
0
int _tmain(int argc, _TCHAR* argv[])
{	int i = 0;
	FILE *out;
	out = fopen("poly5test.m", "w+");
	fprintf(out, "TestData = [...\n");
	fclose(out);

	int row = sizeof(DATA)/sizeof(DATA[0][0])/4;
	printf("rowDATA = %d\n", row);
	
	poly_coeff *COEFFS = data_to_coeff(DATA, row);
	/*printf("COEFFS table\n");
	for(int i=0; i<row-1; i++){
		printf("%f %f %f %f\n", COEFFS[i].t0, COEFFS[i].t1, COEFFS[i].a0, COEFFS[i].a1);
	}*/

	out = fopen("poly5test.m", "a");

	float T[] = {0.0, 5.0};
	float dt = 1.0/100;
	float t = 0.0;
	float y, yd, ydd;
	float phi;
	poly_coeff c;
	while(t<=T[1]){
		int index = getIndex(t, COEFFS, row-1); //length of the the COEFFS array is row-1
		if(index == -1){
			//input time less than the time interval
			index = 0;
			c = COEFFS[index];
			phi = 0;
		}else if(index == -2){
			//input time greater than the time interval
			index = row-2; 
			c = COEFFS[index];
			phi = 1;
		}else{
			//found the time interval, evaluate the polynomial at time t
			c = COEFFS[index];
			phi = (t-c.t0)/(c.t1-c.t0);
		}
		
		y = getY(c, phi);
		yd = getYd(c, phi);
		ydd = getYdd(c, phi);
		fprintf(out, "%f %f %f %f;\n", t, y, yd, ydd);
		
		t = t + dt;
	}

	fprintf(out, "];\n");
	fprintf(out,"subplot(3,1,1);\n");
	fprintf(out, "plot(TestData(:,1),TestData(:,2));\n");
	fprintf(out,"subplot(3,1,2);\n");
	fprintf(out, "plot(TestData(:,1),TestData(:,3));\n");
	fprintf(out,"subplot(3,1,3);\n");
	fprintf(out, "plot(TestData(:,1),TestData(:,4));\n");
	fclose(out);

	while(1);
	return 0;
}
Example #2
0
bool creep::move()
{
	//moves creep towards its goal along its generated path by one unit of its speed
	//returns true when creep reaches goal, false otherwise
	if(p.isEmpty())
	{
		cout << "creep has reached its goal, please kill it off\n";
		return true;
	}
	coord next = p.getNext();

	Xdir = next.x - prevPos.x;
	Ydir = next.y - prevPos.y;
	if(Xdir == 0 && Ydir == 0)
	{
		p.pop();
		if(p.isEmpty())
		{
			cout << "creep has reached its goal, please kill it off\n";
			return true;
		}
		coord next = p.getNext();

		Xdir = next.x - prevPos.x;
		Ydir = next.y - prevPos.y;
	}

	setX(getXd() + (speed * Xdir * CLOCK_CAP));
	setY(getYd() + (speed * Ydir * CLOCK_CAP));

	if(Xdir != 0 && getXd() * Xdir >= (next.x * GRID_SIZE * Xdir) + (BOARD_X_OFFSET * Xdir))
	{
		double extra = (getXd() * Xdir) - ((next.x * GRID_SIZE * Xdir) + (BOARD_X_OFFSET * Xdir));
		prevPos = next;
		p.pop();
		if(p.isEmpty())
		{
			//creep got to enemy base, success.
			cout << "creep got to base\n";
			return true;
		}
		next = p.getNext();

		Xdir = next.x - prevPos.x;
		Ydir = next.y - prevPos.y;

		setX(prevPos.x * GRID_SIZE + BOARD_X_OFFSET);
		setX(getXd() + (Xdir * extra));
		setY(getYd() + (Ydir * extra));

	}
	if(Ydir != 0 && getYd() * Ydir >= (next.y * GRID_SIZE * Ydir) + (BOARD_Y_OFFSET * Ydir))
	{

		double extra = (getYd() * Ydir) - ((next.y * GRID_SIZE * Ydir) + (BOARD_Y_OFFSET * Ydir));
		prevPos = next;
		p.pop();
		if(p.isEmpty())
		{
			//creep got to enemy base, success.
			cout << "creep got to base\n";
			return true;
		}
		next = p.getNext();

		Xdir = next.x - prevPos.x;
		Ydir = next.y - prevPos.y;

		setY(prevPos.y * GRID_SIZE + BOARD_Y_OFFSET);
		setX(getXd() + (Xdir * extra));
		setY(getYd() + (Ydir * extra));
	}
	return false;
}