计算几何之向量叉积的运用.doc

上传人:s9****2 文档编号:548449991 上传时间:2023-09-15 格式:DOC 页数:4 大小:37KB
返回 下载 相关 举报
计算几何之向量叉积的运用.doc_第1页
第1页 / 共4页
计算几何之向量叉积的运用.doc_第2页
第2页 / 共4页
计算几何之向量叉积的运用.doc_第3页
第3页 / 共4页
计算几何之向量叉积的运用.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《计算几何之向量叉积的运用.doc》由会员分享,可在线阅读,更多相关《计算几何之向量叉积的运用.doc(4页珍藏版)》请在金锄头文库上搜索。

1、向量叉积的运用1. 向量的叉积(1)定义两个向量a和b的叉积写作ab(有时也被写成ab,避免和字母x混淆)。向量积可以被定义为:|向量a向量b|=|a|b|sin在这里表示两向量之间的角夹角(0 180),它位于这两个矢量所定义的平面上。一个简单的确定满足“右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。向量积c=ab=|a| |b|sin。c的方向垂直于a与b所决定的平面,c的指向按右手规则从a转向b来确定。(2)坐标表示设矢量P =(x1,y1),Q = (x2,y2),则矢量叉积定义为:P Q

2、 = x1*y2 - x2*y1 得到的是一个标量。(3)叉乘的重要性质:设矢量P =(x1,y1),Q = (x2,y2),则有下列性质:性质a:P Q = - ( Q P ) P ( - Q ) = - ( P Q )性质b:若 P Q 0 , 则P 在Q的顺时针方向;若 P Q 0 , 则P 在Q的逆时针方向;若 P Q = 0 , 则P 与Q共线,但可能同向也可能反向。性质c:以P、Q为邻边的平行四边形的面积=abs(PQ),三角形的面积=1/2*abs(PQ)2. 运用(1). 判断点是否在线段上设点为Q,线段为P1P2 ,判断点Q在该线段上的依据是: ( Q - P1 ) ( P2

3、 - P1 ) = 0 且 Q 在以 P1,P2为对角顶点的矩形内。(2). 判断两线段是否相交如果两线段相交,则两线段必然相互跨立对方。P1P2跨立Q1Q2 ,则矢量 ( P1 - Q1 ) 和( P2 - Q1 )位于矢量( Q2 - Q1 ) 的两侧,即( P1 - Q1 ) ( Q2 - Q1 ) * ( P2 - Q1 ) ( Q2 - Q1 ) 0当( P1 - Q1 ) ( Q2 - Q1 ) = 0 时,说明( P1 - Q1 ) 和 ( Q2 - Q1 )共线,P1一定在线段 Q1Q2上或者其延长线上;如果P1在线段 Q1Q2上,不管P2在哪P1P2都会与Q1Q2相交。 (3

4、)判断线段和直线是否相交如果线段 P1P2和直线Q1Q2相交,则P1P2跨立Q1Q2,即:( P1 - Q1 ) ( Q2 - Q1 ) * ( Q2 - Q1 ) ( P2 - Q1 ) 03. 代码判断两线段是否相交的代码(PS:判断点是否在线段上和判断线段和直线是否相交都比判断两线段是否相交简单,代码也可以由判断两线段是否相交的代码修改得出,所以这里不列出了)#include#define MAXV 4typedef structdouble x,y;tpoint;/返回向量OA和OB叉积的结果double cross(tpoint O, tpoint A, tpoint B)retur

5、n (A.x-O.x)*(B.y-O.y)-(B.x-O.x)*(A.y-O.y);double min(double a,double b)if(ab)return a;elsereturn b;/判断点C是否在以A和B为对角线的矩形里面bool is_onseg(tpoint A, tpoint B, tpoint C)if(C.x=min(A.x, B.x) & C.x=min(A.y, B.y) & C.y=max(A.y, B.y)return true;elsereturn false;/判断线段P1P2是否与Q1Q2相交bool is_intersect(tpoint P1,tp

6、oint P2,tpoint Q1,tpoint Q2)double d1,d2,d3,d4;d1=cross(Q1,Q2,P1);d2=cross(Q1,Q2,P2);d3=cross(P1,P2,Q1);d4=cross(P1,P2,Q2);if(d10) | (d10 & d20) & (d30) | (d30 & d40)/d1、d2异号,d3、d4异号,说明相交return true;else if(0=d1 & is_onseg(Q1,Q2,P1)/d1=0,说明P1在线段Q1Q2上或者其延长线上;is_onseg(Q1,Q2,P1)为真,说明点P1在以P1和P2为对角线的矩形里面

7、,综合得P1在线段Q1Q2上return true;else if(0=d2 & is_onseg(Q1,Q2,P2)return true;else if(0=d3 & is_onseg(P1,P2,Q1)return true;else if(0=d3 & is_onseg(P1,P2,Q2)return true;elsereturn false;int main()tpoint pMAXV;int i;for(i=0;i4;i+)scanf(%lf%lf,&pi.x,&pi.y);if(is_intersect(p0,p1,p2,p3)printf(Yesn);elseprintf(Non);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学研究

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号