指向最接近x,y的直线

时间:2011-08-22 00:10:19

标签: algorithm geometry

  

可能重复:
  How can I tell if a point is nearby a certain line?

//Returns the point on the line traced from start to end which
//comes nearest to 500,000, 500,000. The points are scaled between
//1,000,000 and 0 from their original fp types.
Point closestToCentre(Point start, Point end);

任何人都知道比单步穿过像素更快的方法吗?

可能会比我更警觉地展示他们的数学和数学几何实力好吗?

_______ EDIT ___________

谢谢Kris,这让我感到困惑:

[X; -a / BX-C / B] = [0; -c / B] - 1 / B [-b;斧头。

现在我看到它只是将矢量(主要是y分量)分成两个,它们组合起来产生相同的结果。得到旧的部分分数脑细胞兴奋一分钟然后:)

_______ EDIT _________

Jason Moore,感谢您的灵感,这就是我正在做的,图形化,

64x64 square with 2 sample lines each passing edge to edge and missing the centre by some distance

我希望更清楚。

____ EDIT ________

所以我可以合理地期望在我的采样线上采用与我的采样线成直角的线并从中心运行但是如何判断它们何时接触?

enter image description here

我认为克里斯的方程式页面是要走的路。如果你们都告诉我这是一个两步的过程。现在只是两个联立方程,所以我可能不需要Kris的推导。

____ EDIT _________

无论好坏,我都不知道,但作为搜索引擎的stackoverflow之美向我揭示了几条调查路线。首先,我喜欢这里的第一个解决方案: Shortest distance between a point and a line segment

但为了向我证明这一点,我需要matti在底部的解决方案(但是一个)的链接:

http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static

即使我可以遵循它,推导也是如此简单和优雅!

给定http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html

3 个答案:

答案 0 :(得分:7)

这是一个点线上线性投影的问题,可以通过MathWorld详细阐述的精细矢量体操来完成。

本文详述了如何找到从点到线的最短距离,其中一个中间步骤是找到从点x,y到原始线的垂直线。相交这两条线将为您提供最接近x,y的线。

编辑以回应评论:链接中的哪个等式(2)正在将矢量转换为让人联想到y = mx + c的形式,这使您可以快速轻松地读取渐变,从中垂直可以很容易地计算出梯度。

答案 1 :(得分:1)

我认为最快的方法是分两个步骤:

  1. 假设您的线条长度无限,并找到您的直线与其垂直平分线的交点(500,000,500,000)。
  2. 确保该点实际上在您的线上,否则找到最近的端点。
  3. Kris的帖子很好地介绍了第1步,所有你需要做的就是添加第2步的支票,因为你有一个线段而你是金色的。

    设点1 =(x1,y1),端点2 =(x2,y2)。然后包含这两个点的行是

    y =(y2 - y1)/(x2 - x1)*(x - x1)+ y1

    和perp。平分线(5e5,5e5)是

    y =(x1 - x2)/(y1 - y2)*(x - 5e5)+ 5e5

    你的点(x,y)是上述两个方程(或两个端点之一)的解(x,y)。这可能比mathworld链接更直接。请注意,此解决方案失败,但是,当您的线条几乎垂直或几乎水平时,我不认为mathworld解决方案风格,但我没有仔细观察。

答案 2 :(得分:0)

请参阅我对此Stack Overflow question的回答。这个问题比你的问题复杂,所以你应该能够在我的答案中使用前几个步骤来获得你需要的东西。