绘图程序中直线的拾取判断[1]

[入库:2005年8月18日] [更新:2007年3月25日]

本文简介:选择自 involute 的 blog

绘图程序中常需要对绘制的对象进行拾取,rectrgn等形状都好说只用简单调用ptinrectptinrgn函数既可以返回用户是否点击了该图形从而进行拾取,直线是对象里比较特殊的一种,如果一定要求点中直线本身(也就是点击点在直线上)未免难为了用户,毕竟,一个像素的宽度是很不容易掌握的。这时,可以采用计算点击点到直线的距离的办法,如果点击点距离直线在一个可以允许的范围内就判定为拾取直线,如图:



在图中点击点为p(x,y),判断此次点击是否拾取直线(p1,p2)就是计算点p到直线(p1,p2)的距离。如果已知直线方程ax+by+c=0,那么点(x,y)到直线距离即为d=fabs(ax+by+c)/sqrt(a*a+b*b)。


已知直线上两点(p1,p2),那么直线方程就是(y1-y2)*x+(x2-x1)*y+x1*y2-x2*y1=0 。


常规做法这样就可以了,但是复杂的公式让我们的程序不是变得更多的变量就是有复杂得难以读懂的语句。


我们把上面的直线及点所在坐标系移动一下,复杂的问题会变得简单不少,如图:



也就是在计算前作一下变换:


x1-=x2;
y1-=y2;
x-=x2;
y-=y2;
x2=0;
y2=0;


本文关键:直线 拾取
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top