叉乘、快速排斥与跨立实验及求取三角形面积

来源:互联网 发布:淘宝(中国)软件有 编辑:程序博客网 时间:2024/06/06 04:28
<pre name="code" class="cpp">叉乘(一)判断方向(二)判断线段相交(三)求三角形面积(一)判断方向叉乘的性质如下:   (1). P x Q > 0; 表示P在Q的顺时针方向;   (2). p x Q < 0; 表示P在Q的逆时针方向;   (3). P x Q = 0; 表示P和Q是共线的 P(x1,y1),Q(x2,y2), P*Q=x1y2-x2y1 判断结果三种状态模版为:struct point{   int x,y;}p[i];double cross(point a,point b,point c) //向量P=(b.x-a.x,b.y-a.y),Q=(c.x-a.x,c.y-a.y),则P与Q                                      //叉积为PQ=(b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);{     return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);}(二)判断线段相交快速排斥与跨立实验#define eps 1e-8#define maxn 100005struct point{    double x,y;};struct line{    point a,b;}s[maxn];double cross(point a,point b,point c){    return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);}bool quick(line p,line q){    if( min(p.a.x,p.b.x)<=max(q.a.x,q.b.x)&&        min(q.a.x,q.b.x)<=max(p.a.x,p.b.x)&&        min(p.a.y,p.b.y)<=max(q.a.y,q.b.y)&&        min(q.a.y,q.b.y)<=max(p.a.y,p.b.y)&& cross(p.a,q.a,q.b)*cross(p.b,q.a,q.b)<-eps&& cross(q.a,p.a,p.b)*cross(q.b,p.a,p.b)<-eps)        return true;        return false;}(三)求三角形面积double area(point a, point b, point c){    return fabs(cross( a, b,c)/2);}


                                             
1 0
原创粉丝点击