计算几何-------叉乘

叉乘的应用

叉积的几何意义
|c|=|a×b|=|a| |b|sinα (α为a,b向量之间的夹角)
在这里插入图片描述
已知向量A和B,A × B的到如图红色的向量,根据右手螺旋定则,手指指向A,向B方向合拢,大拇指向上为正,向下为负

向量p=(a,b), q=(c,d)
p × q = ad - bc

应用

1、计算面积

在这里插入图片描述
向量p=(a,b), q=(c,d)
p × q = ad - bc = - q × p
叉乘的大小等于于2倍三角形面积(叉乘结果取绝对值

2、判断点与直线的关系

设向量P=(x1,y1),Q=(x2,y2)

P × Q
①若结果为正,则P在Q的顺时针方向;
②若结果为负,则P在Q的逆时针方向;
③若结果为零,则P与Q共线,也就是平行,可能同向可能反向

3、求直线交点

设直线1经过两点(x1,y1)、(x2,y2),直线2过两点(x3,y3)、(x4,y4).
先用叉乘判断两直线是否相交:

int a=x2-x1,b=y2-y1;
int c=x4-x3,d=y4-y3;
int cha=a*d-b*c;

如果叉积cha不等于0则相交,若为0则平行或者重合。

求交点:

int a1=y1-y2;
int b1=x2-x1;
int c1=x1*y2-x2*y1;

int a2=y3-y4;
int b2=x4-x3;
int c2=x3*y4-x4*y3;

int D1=a2*b1-a1*b2;
int D2=a1*b2-a2*b1;

double X=1.0*(b2*c1-b1*c2)/D1;
double Y=1.0*(a2*c1-a1*c2)/D2;
cout<<"交点为:"<<X<<' '<<Y<<endl;

猜你喜欢

转载自blog.csdn.net/qq_40534166/article/details/99899524