http://www.richsearch.com/search/search.aspx?S1=+%2B%E7%82%B9+%2B%E9%80%89+%2B%E5%8F%96&Submit1=+%E6%A3%80%E7%B4%A2+
点 选取 拾取 都可以,自己查吧
http://www.delphibbs.com/delphibbs/dispq.asp?LID=164922
这本来是计算机图形学中最基本的算法了,不过好像很多人还不知道什么是图形拾取,
甚至把图形、图像混为一谈。所谓图形是指用线框进行几何作图,比如说CAD一类的;图像
指得是点阵图,如Bitmap...。
图形拾取是在屏幕上检测标点设备是否检索到某个几何形体,如直线、圆弧...。至于检测
某些像素的集合,应该是图像处理中的图像识别问题了。
图形拾取的算法很多,概念上最简单的是判断一点到一条线断的距离是否在给定的范围
之内。当然概念简单的程序可能算起来比较慢,所以引申出来很多不同的算法。不论是那
种算法,第一个步骤都要判断“点“是否在“线段矩形“范围之内,如果在,在判断接近
程度。这里我给出点线距离算法,其他算法可以随便照一本计算机图形学的书看看:
function PointNearLine(const P, P1, p2: TPoint; D: integer): boolean;
var l, w: double;
begin
if (p.x > min(p1.x,p2.x)-d) and (p.x < max(p1.x,p2.x)+d) and
(p.y > min(p1.y,p2.y)-d) and (p.y < max(p1.y,p2.y)+d) then
begin
l := Sqrt(Sqr(p2.x-p1.x)+Sqr(p2.y-p1.y)); //length of the line
w := abs((p1.y-p2.y)*(p.x-p1.x)-(p1.x-p2.x)*(p.y-p1.y));
result := (w/l <= d);
end
else result := false;
end;