Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最靠近x,y的直线上的点_Algorithm_Geometry - Fatal编程技术网

Algorithm 最靠近x,y的直线上的点

Algorithm 最靠近x,y的直线上的点,algorithm,geometry,Algorithm,Geometry,可能重复: 有人知道比单步通过像素更快的方法吗 能不能请比我更机警的人展示一下他们的数学和几何能力 _______编辑___________ 谢谢克里斯,这让我很困惑: [x;-a/bx-c/b]=[0;-c/b]-1/b[-b;a]x 现在我看到它只是将向量(主要是y分量)分成两部分,两部分结合起来产生相同的结果。让旧的部分脑细胞兴奋了一分钟:) _______编辑_________ Jason Moore,谢谢你的灵感,以下是我正在做的,以图形的方式 我希望这更清楚 ____编辑____

可能重复:

有人知道比单步通过像素更快的方法吗

能不能请比我更机警的人展示一下他们的数学和几何能力

_______编辑___________

谢谢克里斯,这让我很困惑:

[x;-a/bx-c/b]=[0;-c/b]-1/b[-b;a]x

现在我看到它只是将向量(主要是y分量)分成两部分,两部分结合起来产生相同的结果。让旧的部分脑细胞兴奋了一分钟:)

_______编辑_________

Jason Moore,谢谢你的灵感,以下是我正在做的,以图形的方式

我希望这更清楚

____编辑________

因此,我可以合理地预期,以一条与采样线成直角的线,从中心运行,但如何判断它们何时接触

我认为克里斯的方程页才是正确的方向。如果你们都告诉我这是一个两步的过程。现在它只是两个联立方程,所以我可能不需要克里斯的导数

____编辑_________

我不知道这是好事还是坏事,但stackoverflow作为一个搜索引擎的魅力向我揭示了几个调查途径。我主要喜欢这里的第一个解决方案:

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

推导是如此简单和优雅,甚至我可以遵循它


给定

这是一个点到直线的线性投影问题,可以通过一些精细的矢量体操来完成,如中所述

本文详细介绍了如何找到从点到直线的最短距离,中间步骤之一是找到从点x、y到原始直线的垂直线。将这两条线相交将得到这条线上最接近x,y的点


编辑以回应评论:链接中的方程式(2)所做的是将向量转换为一种让人联想到y=mx+c的形式,它允许您快速、轻松地读取梯度,从中可以轻松计算垂直梯度

我认为最快的方法是分两步进行:

  • 假设直线的长度是无限长的,通过(500000,500000)找到直线与其垂直平分线的交点
  • 确保该点实际上在您的直线上,否则请找到最近的端点
  • Kris的帖子很好地涵盖了第一步,你所要做的就是为第二步添加检查,因为你有一条线段,你是金色的

    设点1=(x1,y1)和端点2=(x2,y2)。那么包含这两点的直线就是

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

    还有那个罪犯。通过(5e5,5e5)的平分线为

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


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

    我认为无处不在的快速排序很快就会在这里自行搜索。不它们已经分类了!!这是一个三角学问题。试着问一下,不要重复。其他人也有同样的问题。但是,在一条直线上找到离给定点最近的点与确定一个点是否靠近一条直线是不同的问题。你可以使用这个问题的答案来找到这个问题的答案,但值得注意的是,这个问题的选择解决方案并不能回答这个问题。这看起来是一个很好的链接。我的迭代sol运行到一个fpPoint类和几个局部变量。现在我对[x;-a/bx-c/b]=[0;-c/b]-1/b[-b;a]x感到困惑。想编辑你的帖子吗,我不认为我已经讨论了简单化向量,所以我在这里的速度很慢。谢谢。啊,是的,我以前听说过。但我想你会发现这是(eq.1)的目标。我本想说我比你领先一步,但现在我被公式3难住了:)在你的链接中,向量上方的umlat^表示它是单位向量吗?我认为英国的数学书用的是平顶帽子。这个维基百科部分使用了相同的公式,还列出了查找线上最近点的
    x
    y
    的公式:@yochannah和Sphinxxx都很好,我会上的。抱歉,这篇文章的冗长让我转向了我的VC IDE和一个迭代sol。你的观点“2.确保那一点确实在你的线上,否则就找到最近的端点。”还没有阅读Kris的链接,听起来你好像在期待我在我的线上找到我的观点,这是非常不可能的。如果我不清楚,很抱歉。步骤2只是从三个候选点中选择最近的点:步骤1中找到的点,或两个端点。这里没有任何复杂的数学,真的。如果以下条件为真:
    xmax(p1.x,p2.x)| y>max(p1.y,p2.y)
    ,则必须在两个端点之间选择正确的最近点。
    //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);