计算几何

来源:互联网 发布:剑三当战炮姐脸型数据 编辑:程序博客网 时间:2024/04/28 00:26

这里说一点计算几何的基本模板

点的表示

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);}


原创粉丝点击