首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找两条直线的交点

寻找两条直线的交点
EN

Stack Overflow用户
提问于 2013-07-20 06:24:33
回答 3查看 1.2K关注 0票数 0

我有两行代码:

代码语言:javascript
复制
y = -1/3x + 4
y = 3x + 85

交叉口在[24.3, 12.1]

我准备了一组坐标:

代码语言:javascript
复制
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

有没有更好的办法来解决这个问题?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-20 07:49:10

在经历了许多磨难和许多不同的尝试之后,我找到了一个简单的代数方法here,它不仅有效,而且大大简化了。

代码语言:javascript
复制
distance = ((y - mx - b).abs / Math.sqrt(m**2 + 1))

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

票数 0
EN

Stack Overflow用户

发布于 2013-07-20 06:45:50

使用一点数学有什么错?

如果您有:

代码语言:javascript
复制
y = m1 x + b1
y = m2 x + b2

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

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

代码语言:javascript
复制
x = (b2 - b1)/(m1 - m2)
y = (m1 b2 - m2 b1)/(m1 - m2)
票数 1
EN

Stack Overflow用户

发布于 2015-07-14 03:48:14

对于未来的谷歌人:

代码语言:javascript
复制
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

这是我在网上找到的最简单、最干净的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17756435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档