这里说一点计算几何的基本模板
点的表示
struct point
{
double x;
double y;
};
向量的表示
struct v
{
point start;
point end;
};
向量的加减法
P+Q = (x1+x2,y1+y2);
P+Q = (x1-x2,y1-y2);
向量的点乘
P*Q = (x1*x2+y1*y2);
double dotProduct(v* v1,v* v2)
{
v vt1,vt2;
double result;
vt1.start.x = 0 , vt1.start.y = 0;
vt1.end.x = v1->end.x - v1->start.x;
vt1.end.y = v1->end.y - v1->start.y;
vt2.start.x = 0 , vt2.start.y = 0;
vt2.end.x = v2->end.x - v2->start.x;
vt2.end.y = v2->end.y - v2->start.y;
result = vt1.end.x * vt2.end.x + vt1.end.y * vt2.end.y;
returb result;
}
/*dotProduct*/
double dmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y);
}
double dmult(double x1,double y1,double x2,double y2,double x0,double y0)
{
return (x1-x0)*(x2-x0)+(y1-y0)*(y2-y0);
}
向量的叉乘
代码
double crossProduct(v* v1,v* v2)
{
v vt1,vt2;
double result;
vt1.start.x = 0 , vt1.start.y = 0;
vt1.end.x = v1->end.x - v1->start.x;
vt1.end.y = v1->end.y - v1->start.y;
vt2.start.x = 0 , vt2.start.y = 0;
vt2.end.x = v2->end.x - v2->start.x;
vt2.end.y = v2->end.y - v2->start.y;
result = vt1.end.x * vt2.end.y - vt1.end.y * vt2.end.x;
returb result;
}
/*CorssProduct*/
double xmult(point p1,point p2,point p0)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double xmult(double x1,double y1,double x2,double y2,double x0,double y0)
{
return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);
}