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

有宝石或更好的方法吗?

注意:上述方法不起作用。请参阅我的答案以获取有效的解决方案。

4

3 回答 3

1

使用一点数学有什么问题?

如果你有:

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

这是一个简单的线性方程组。

如果你解决它们,你的交集是:

x = (b2 - b1)/(m1 - m2)
y = (m1 b2 - m2 b1)/(m1 - m2)
于 2013-07-19T22:45:50.153 回答
0

经过许多痛苦和许多不同的尝试,我在这里找到了一种简单的代数方法,它不仅有效,而且大大简化了。

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

其中 x 和 y 是已知点的坐标。

于 2013-07-19T23:49:09.580 回答
0

对于未来的 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

我在互联网上找到的最简单和最干净的方法。

于 2015-07-13T19:48:13.627 回答