2011-08-22 65 views
5

可能重複:
How can I tell if a point is nearby a certain line?點上最接近x線,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); 

任何人都知道的不是通過像素單步更快的方法?

可能比我更警覺一些數學演示他們的數學&幾何能力?

_______EDIT___________

由於克里斯,這是困惑我:

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

現在我看到它只是分裂(主要是y分量)向量到兩個結合產生相同的結果。得到了老部分分式腦細胞興奮了一分鐘,然後:)

_______EDIT_________

傑森·摩爾,謝謝你的靈感,這裏是我在做什麼,圖形,

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

我希望更清楚。

____EDIT________

所以,我可以合理預期採取直角線到我的採樣線,並在中心運行它,但怎麼說,當他們聯繫嗎?

enter image description here

我覺得方程的克里斯的頁面是要走的路。如果你們都告訴我這是一個兩步的過程。現在只有兩個聯立方程式,所以我可能不需要克里斯的推導。

____EDIT_________

無論是好事還是壞事,我不知道,但計算器作爲搜索引擎的美已經向我透露調查的幾種途徑。主要我喜歡這裏的第一個解決方案: Shortest distance between a point and a line segment

但要證明這一點,我的自信心,我需要從馬蒂的解決方案的鏈接在底部(但一):

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

的推導是如此的簡單和優雅,甚至我可以按照它!

http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html鑑於

+0

我想無處不在快速排序是將在這裏很快就攻盡。沒有!他們已經分類!如此接近,但.. – John

+0

這是一個三角問題。嘗試在http://math.stackexchange.com/上提問。 – Enigmativity

+0

不重複。那是對其他人提出同樣的問題。但是找到最靠近給定點的線上的點是一個不同的問題,而不是找到一個點是否接近一條線。你可以用這個答案找到答案,但特別是對於這個問題的解決方案沒有回答這個問題。 – Tatarize

回答

7

這是一個點的線性投影的到線,其可與一些細微的矢量體操來完成,如在MathWorld闡述的問題。

本文詳細介紹如何找到的線從一個點的最短距離,和的中間步驟中的一個是找到從點x的垂線,y以原線。相交這兩條線會給你最接近x,y的點。

編輯迴應評論:鏈接中的方程式(2)正在將矢量轉換成讓人聯想到y = mx + c的形式,它可讓您快速輕鬆地讀取漸變,垂直梯度可以很容易地計算。

+0

這看起來是一個很好的鏈接。我的迭代sol跑到一個fpPoint類和幾個本地變量。現在我迷惑了:[x; -a/BX-C/B] = [0; -c/B] - 1/B [-b;斧頭。小心編輯你的帖子,我不認爲我已經覆蓋簡單的載體,所以我在這裏速度很慢。謝謝。 – John

+0

啊,是y = mx + c,我以前聽說過。但是我認爲你會發現這是(eq.1)的目標。是會說我比你先走了一步,但現在我難住了等式3 :) – John

+0

在你的鏈接中,矢量上面的umlat表示它是一個單位矢量嗎?我認爲英國的數學書用平帽..答案後6年內 – John

1

我認爲最快的方式將分兩個步驟:

  1. 假設你的線路長度爲無限,並通過(500,000,500,000)找到你的線和垂直平分線的交點。
  2. 確保點實際上在你的線上,否則找到最接近的端點。

Kris的帖子很好地涵蓋了第1步,您只需添加第2步的支票,因爲您有一個線段,而且您是金手鐲。

設點1 =(X1,Y1)和端點2 =(X2,Y2)。然後將含有這兩個點的線是

Y =(Y2 - Y1)/(X2 - X1)*(X - X 1)+ Y1

和PERP。平分線通過(5E5,5E5)是

Y =(X1 - X2)/(Y1 - Y2)*(X - 5E5)+ 5E5

你的點(x,y)是解(x, y)到上述兩個方程(或兩個端點中的一個)。這可能比數學世界鏈接更直接。請注意,這個解決方案失敗了,但是,當你的線幾乎是垂直的或幾乎是水平的,但我不認爲數學世界解決方案的風格確實如此,雖然我沒有仔細看過。

+0

好點,沒有考慮到! – Kris

+0

對不起,這篇文章的羅列把我變成了我的VC IDE和一個迭代的解決方案。你的觀點「2.確保該點實際上在你的線上,否則找到最接近的端點。」沒有閱讀Kris的鏈接,聽起來好像你期待我在我的專輯上找到我的觀點,這是最不可能的。 – John

+0

對不起,如果我不清楚。步驟2簡單地從三個候選點中選擇最近點:步驟1中找到的點或兩個端點。這裏沒有任何複雜的數學,真的。如果下列條件成立:'x max(p1.x,p2.x)|| y> max(p1.y,p2.y)',則必須在兩個端點之間選擇正確的最近點。 – Sean

0

見我回答這個堆棧溢出question。這個問題比你的問題更復雜,所以你應該能夠使用我的答案中的前幾個步驟來獲得你所需要的。

+0

我更喜歡http://stackoverflow.com/questions/3120357/get-closest-point-to-a-line – John