Esempio n. 1
0
Vector2D& Vector2D::operator/=(double u)
{
	if (!EQUALZERO(u))
	{
		x /= u;		y /= u;
	}
	return(*this);
}
Esempio n. 2
0
double	calc_angle(double *u, double *v)
{
  double	ps;
  double	n1;
  double	n2;
  double	angle;

  if (u == NULL || v == NULL)
    return (0.001F);
  angle = 0.0F;
  ps = calc_ps(v, u);
  n1 = calc_norme(u);
  n2 = calc_norme(v);
  if (!EQUALZERO(ps) && !EQUALZERO(n1) && !EQUALZERO(n2))
    angle = ps / (n1 * n2);
  angle = angle < 0.0000001 ? 0.00000 : angle;
  return (angle);
}
Esempio n. 3
0
short Vector2D::AtWhere(Vector2D v0,Vector2D v1)
{
	Vector2D vTemp1(v1.y-v0.y,v0.x-v1.x);
	Vector2D vTemp2(x-v0.x,y-v0.y);
	double d=vTemp1*vTemp2;
	if(EQUALZERO(d))
		return 0;
	if(d>0)//right
		return 1;
	return -1;
}
Esempio n. 4
0
bool Vector2D::Intersect(Vector2D v1,Vector2D v2,Vector2D v3,Vector2D v4)//tow line intersect
{
	double d=(v4.y-v3.y)*(v1.x-v2.x)-(v2.y-v1.y)*(v3.x-v4.x);
	if(EQUALZERO(d))
		return false;

	double d1=v1.x*v2.y-v2.x*v1.y;
	double d2=v3.x*v4.y-v4.x*v3.y;
	x=((v4.x-v3.x)*d1-(v2.x-v1.x)*d2)/d;
	y=((v4.y-v3.y)*d1-(v2.y-v1.y)*d2)/d;
	return true;
}