2013-07-19 45 views
0

交點我有兩條線:找到的兩行

y = -1/3x + 4 
y = 3x + 85 

的交點是在[24.3, 12.1]

我有一組座標的準備:

points = [[1, 3], [4, 8], [25, 10], ... ] 
#y = -1/3x + b 
m_regr = -1/3 
b_regr = 4 
m_perp = 3 #(1/m_regr * -1)  

distances = [] 
points.each do |pair| 
    x1 = pair.first 
    y2 = pair.last 
    x2 = ((b_perp - b_regr/(m_regr - m_perp)) 
    y2 = ((m_regr * b_perp)/(m_perp * b_regr))/(m_regr - m_perp) 
    distance = Math.hypot((y2 - y1), (x2 - x1)) 
    distances << distance 
end 

是否有寶石或爲此一些更好的方法?

注意:上述方法不起作用。查看我的答案,找到可行的解決方案。

+0

@theTinMan我只是不確定刪除cude的整個應用/目的和描述他到目前爲止所嘗試的是適當的編輯能力 –

+1

我相信這是不必要的無關信息,導致TL; DR。重要的是要記住,Stack Overflow不是一個論壇,目標是創建一個類似維基百科的問題和答案存儲庫。百科文章不是會話式的,而且是事實。問題的要點在編輯之後仍然存在,現在簡明扼要地闡述。如果您不同意,歡迎您爲主持人舉報。 –

+0

然而,一個或多個句子解釋**爲什麼**一個問題正在被問到爲一些常客設定了背景。在幾乎所有其他人類學背景下,這些信息,特別是如果簡單解釋,都被認爲是有價值的信息。我和這個人認識到,搜索引擎可能會拿起一些關於從ruby中的趨勢線獲得標準偏差的討論,這在互聯網上幾乎沒有提到。 –

回答

0

多的苦難和許多不同的嘗試後,我發現了一個簡單的代數方法here不僅作品,但被大大簡化。

distance = ((y - mx - b).abs/Math.sqrt(m**2 + 1)) 

其中x和y是已知點的座標。

+0

爲什麼你不能只定義一個函數'def get_x_int(b2,b1,m1,m2); (B2-B1)/(M1-M2);結束;'? –

+0

我可以,但lambda似乎更緊湊。它們可以在初始化部分定義並存儲在實例變量中。 –

+0

我想你可以;它取決於你的代碼的更大的上下文,但它通常不那麼慣用。這應該是一個類/實例的方法?它可能只是一個類方法,或者甚至是'Math'模塊的擴展。它是「通用的」,每當你只需要調用一個類/模塊方法就沒有理由創建一個新的proc對象,就像'sqrt'一樣。 –

1

使用小數學有什麼問題?

如果您有:

y = m1 x + b1 
y = m2 x + b2 

這是線性方程組的簡單系統。

如果你解決這些問題,你的交集:

x = (b2 - b1)/(m1 - m2) 
y = (m1 b2 - m2 b1)/(m1 - m2) 
+0

它可能不是你的數學,我正在調試很多不同的變量,但當時這不起作用 –

+0

@boulder_ruby你能舉個例子嗎? –

1

對於未來的Google:

def solution k, l, m, n, p, q, r, s 
    intrsc_x1 = m - k 
    intrsc_y1 = n - l 
    intrsc_x2 = r - p 
    intrsc_y2 = s - q 

    v1 = (-intrsc_y1 * (k - p) + intrsc_x1 * (l - q))/(-intrsc_x2 * intrsc_y1 + intrsc_x1 * intrsc_y2); 
    v2 = (intrsc_x2 * (l - q) - intrsc_y2 * (k - p))/(-intrsc_x2 * intrsc_y1 + intrsc_x1 * intrsc_y2); 

    (v1 >= 0 && v1 <= 1 && v2 >= 0 && v2 <= 1) ? true : false 
end 

我已經在互聯網上發現的最簡單和最徹底的方法。