codes#3

inline const double Cpro(const Vector &a,const Vector &b)
{
	return a.x*b.y-a.y*b.x;
}
inline const double doublearea(const Point &p1,const Point &p2,const Point &p3)
{
	return Cpro(Vector(p1,p2),Vector(p1,p3));
}
inline const double Abs(const double &x)
{
	return x<0?-x:x;
}
template<typename Line>inline const Point Cross(const Ray &ray,const Line &line)
{
	double k1,b1,k2,b2;
	int ver1=Abs(ray.vec.x)<eps,ver2=Abs(line.a.x-line.b.x)<eps;
	Point cp;
	if(ver1)
		k2=(line.a.y-line.b.y)/(line.a.x-line.b.x),b2=line.a.y-line.a.x*k2,cp=(Point){ray.p.x,ray.p.x*k2+b2};
	else
		if(ver2)
			k1=ray.vec.y/ray.vec.x,b1=ray.p.y-ray.p.x*k1,cp=(Point){line.a.x,line.a.x*k1+b1};
		else
		{
			k1=ray.vec.y/ray.vec.x,b1=ray.p.y-ray.p.x*k1;
			k2=(line.a.y-line.b.y)/(line.a.x-line.b.x),b2=line.a.y-line.a.x*k2;
			const double x=(b1-b2)/(k2-k1);
			cp=(Point){x,x*k1+b1};
		}
	return cp;
}
inline const double distance(const Point &a,const Point &b)
{
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
posted @ 2019-11-06 09:34  ZYyboT  阅读(84)  评论(0)    收藏  举报