项目开发日志(其四)

改动

添加了注释
添加了冰球与球门中心相对位置的判断,从而计算出合适的击球坐标

代码

/*
击球手:
坐标(x1,y1),质量m1,半径r1,碰撞前速度(vx1,vy1)合速度v1,碰撞后速度(vx1_,vy1_)
冰球:
坐标(x2,y2)质量m2,半径r1,碰撞前速度(vx2,vy2),碰撞后速度(vx2_,vy2_)
球门中心坐标(x3,y3)

输入:击球时冰球中心坐标。输出:击球手击球速度大小方向和击球手坐标。
*/
#include <iostream>
#include <algorithm>
#include <cmath>

double get_angel(x2,y2)//获取击球手速度方向
{
	double alpha, beta;
	double a, b, c, complex_term;

	alpha = (y3 - y2) / (x3 - x2);
	complex_term = pow(2 * m1*v1 / ((m2 - m1)(alpha*vx2 - vy2)), 2);
	a = 1 + complex_term;
	b = -2 * complex_term*alpha;
	c = pow(alpha, 2)*complex_term - 1;
	beta = get_result(a, b, c);
	
	return beta;
}
double get_hitx(beta)//获取击球手击球时的x方向坐标
{
	double sin, x1;

	cos = 1 / sqrt(1 + pow(beta, 2));
	x1 = x2 - (r1 + r2)*cos;
	return x1;
}
double get_hity(beta)//获取击球手击球时的y方向坐标
{
	double cos, y1;

	sin = beta / sqrt(1 + pow(beta, 2));
	if (y2 >= y3)//判断冰球相对球门中心的y轴相对位置
	{
		y1 = y2 + (r1 + r2)*sin;
	}
	else{
		y1 = y2 - (r1 + r2)*sin;
	}
		return y1;
}

double get_result(a,b,c)//求根函数
{
	double a, b, c;
	t = b*b - 4 * a*c;
	if (t == 0) //由根的判别式来决定执行哪条分支
	{
		
	  f2(a, b);
    
	}
	else if (t < 0)
	{
		f1();
	}
	else
	{
		f3(a, b, c);
	}
}
void f1()
{
	cout << "此方程无根!" << endl;
}
double f2(double a, double b)
{
	x = -b / (2 * a);
	return x;
}
void f3(double a, double b, double c)
{
	x1 = ((-b + (sqrt(t))) / (2 * a));
	x2 = ((-b - (sqrt(t))) / (2 * a));
	return max(x1, x2);
}

团队成员

杨静悟 www.cnblogs.com/HUST-JingwuYang

曹迦勒 www.cnblogs.com/herrpi/

黄竞超 www.cnblogs.com/HJC2/

李开旭 www.cnblogs.com/likaixu/

posted @ 2017-01-10 10:45  sombra  阅读(154)  评论(1编辑  收藏  举报