加载中…
个人资料
稻草人
稻草人
  • 博客等级:
  • 博客积分:0
  • 博客访问:99,384
  • 关注人气:24
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

判断点在线的左边还是右边

(2013-05-17 16:08:31)
分类: 数学
  • 判断点在线的左边还是右边

以及两点p1(x1,y1),p2(x2,y2),判断点p(x,y)在线的左边还是右边。

1.  bool LeftOfLine(const ZCoord2D& p, const ZCoord2& p1, const ZCoord2D& p2)

{

double tmpx = (p1.x - p2.x) / (p1.y - p2.y) * (p.y - p2.y) + p2.x;

if (tmpx > p.x)//tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。return true;
return false;

}

2.  另外一种方法:设直线是由其上两点(x1,y1(x2,y2)确定的,直线方向是由(x1y1)到(x2y2)的方向。这时若直线方程记为Ax+By+C=0则有:A=y1-y2; B=x2-x1; C=x1*y2-x2*y1;这时可以计算DD=A*xp+B*yp+C

D>0,则点(xpyp)在直线的左侧;若D<0,则点在直线的右侧;D0点在直线上

Tmp = (y1 – y2) * x + (x2 – x1) * y + x1 * y2 – x2 * y1

Tmp > 0 在左侧

Tmp = 0 在线上

Tmp < 0 在右侧

3.  设线段端点为从 A(x1, y1)B(x2, y2), 线外一点 P(x0y0),判断该点位于有向线AB 的那一侧。

a = ( x2-x1, y2-y1)
b = (x0-x1, y0-y1)
a x b = | a | | b | sin
φ (φ为两向量的夹角)
| a | | b |
0 时, a x b 决定点 P的位置
所以 a x bz 方向大小决定 P位置
(x2-x1)(y0-y1)
(y2-y1)(x0-x1) > 0 左侧
(x2-x1)(y0-y1)
(y2-y1)(x0-x1) < 0 右侧
(x2-x1)(y0-y1)
(y2-y1)(x0-x1) = 0 线段上 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有