判断 点 与直线与矩形的关系

内容整理自网络:http://www.cnblogs.com/xfzhang/archive/2012/04/14/2447820.html

 

判断点在直线的一侧

 

方法1

已知P(0,0)Q(3,2)两点,试判断PQ是否在直线2x+3y=4的同一侧。

:直线2x+3y=4

即直线2x+3y-4=0

PQ代入2x+3y-4得到

2*0+3*0-4=-4 < 0

2*3+3*2-4=8 > 0

所以在两侧!

 

方法2

怎么判断坐标为(xp,yp)的点P是在直线的哪一侧呢?

设直线是由其上两点(x1,y1)(x2,y2)确定的,直线方向是由(x1,y1)(x2,y2)的方向。

假设直线方程为:Ax+By+C=0,则有:

    A=y2-y1;   B=x1-x2;   C=x2*y1-x1*y2;

这时可以通过计算D,来判断点P是在直线的哪一侧:

    D=A*xp+B*yp+C

D<0,则点P在直线的左侧;

D>0,则点P在直线的右侧;

D0,则点P在直线上。

注:这里的直线是有方向性的!

 

方法3:利用矢量计算快速判定一点在直线的哪一侧

例如:矢量A×矢量B=矢量C

设想矢量A沿小于180度的角度转向矢量B

将右手的四指指向矢量A的方向,右手的四指弯曲代表上述旋转方向,则伸直的拇指指向它们的叉乘得到的矢量C

如果矢量C的方向相同,则在同侧;否则在两侧。

 

注:叉乘计算公式!

若将向量用坐标表示(三维向量),向量a=(x1,y1,z1),向量b=(x2,y2,z2),则:

 

点乘,也叫向量的内积、数量积:

    向量a·向量b = |a||b|cos<a,b>;          向量a·向量b  = x1x2 + y1y2 + z1z2

 

叉乘,也叫向量的外积、向量积:

    |向量c| = |向量a×向量b| = |a||b|sin<a,b>

向量c的方向与a,b所在的平面垂直,且方向要用“右手法则”判断         

(用右手的四指先表示向量a的方向,然后手指朝着手心的方向<180摆动到向量b的方向,大拇指所指的方向就是向量c的方向);

    向量a×向量b =  | i   j   k | 

            |x1 y1 z1|

            |x2 y2 z2|       

           = (y1z2-y2z1, x2z1-x1z2, x1y2-x2y1)

    (ijk分别为空间中相互垂直的三条坐标轴的单位向量)

向量的外积不遵守乘法交换率

    向量a×向量b = -向量b×向量a

 

判断点是否在矩形、多边形中

 

方法1

注:该方法适用于矩形的四个内角都小于180°

只要判断该点的横坐标和纵坐标是否夹在矩形的左右边和上下边之间。

例如:矩形四个顶点P1P2P3P4,判断P是否包含在矩形中,

只需要判断:(|P2P|×|P2P1|)*(|P3P|×|P3P4|)<=0 and (|P1P|×|P1P4|)*(|P2P|×|P2P3|)<=0

 

方法2:采用点是否包含在多边形中判断

以该点为顶点,做一条射线,使得矩形四个顶点中任意一点都不在射线上。

若该射线与矩形有且仅有一个交点,则在矩形内;若有零个或两个焦点,则在矩形外。

至于射线,可以通过选择肯定在矩形外的一点和已知点练成线段来构成。

只要点坐标不在矩形的left~rightbottom~top范围内即可。

你可能感兴趣的:(判断)