我有两行代码:
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有没有更好的办法来解决这个问题?
注意:上述方法不起作用。有关有效的解决方案,请参阅我的答案。
发布于 2013-07-20 07:49:10
在经历了许多磨难和许多不同的尝试之后,我找到了一个简单的代数方法here,它不仅有效,而且大大简化了。
distance = ((y - mx - b).abs / Math.sqrt(m**2 + 1))其中x和y是已知点的坐标。
发布于 2013-07-20 06:45:50
使用一点数学有什么错?
如果您有:
y = m1 x + b1
y = m2 x + b2这是一个简单的线性方程组。
如果你解决了它们,你的交集是:
x = (b2 - b1)/(m1 - m2)
y = (m1 b2 - m2 b1)/(m1 - m2)发布于 2015-07-14 03:48:14
对于未来的谷歌人:
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这是我在网上找到的最简单、最干净的方法。
https://stackoverflow.com/questions/17756435
复制相似问题