【问题标题】:Finding the intersect of two lines in R在R中找到两条线的交点
【发布时间】:2021-02-13 06:58:46
【问题描述】:

我有一些代码可以从一组点中绘制两条线。 我需要找到两者的交集。

red <- read.table("red.txt", header=TRUE) #Get's table
mag <- red$T #T values
outer <- red$O #outer values
inner <- red$I #inner values
plot(outer, mag) #plot outer points
abline(lm(mag~outer)) #line of best fit 
abline(inner, mag) #add inner line

它会生成一个图形,这与我想要的相似。
(我知道这不是最时尚的)。如何找到线交叉的坐标?

(对不起,我正在学习如何使用它的狡猾可能令人作呕的代码)

【问题讨论】:

  • 查看这个问题stackoverflow.com/questions/49521261/…的选项
  • @AutenticSporks 我一直在努力研究如何将它应用到我的代码中,但我会重新审视它
  • 你能用dput(red)分享你的一些数据吗?
  • 结构(列表(T = c(152L, 288L, 412L, 544L, 669L, 763L, 829L, 877L), O = c(0L, 0L, 8L, 11L, 13L, 16L, 18L) , 19L), I = c(59L, 56L, 51L, 48L, 43L, 40L, 38L, 37L)), class= "data.frame", row.names = c(NA, -8L)) @LMc 知道了这里

标签: r graph


【解决方案1】:

您可以像@SteveM 所说的那样使用一些线性代数来求解这个方程组,下面是使用solve 函数完成的。

  1. lm 为您提供最佳拟合线的系数,您只需将其存储即可,这在下面的对象 fit 中完成。
  2. 您已经为另一条线编码了斜率和截距。您正在绘制的斜率是mag[1],截距是inner[1]。注意:您将 abline 传递给向量 maginner,但此函数采用单个值,因此它仅使用每个向量的第一个元素。
  3. 使用mx - y = -b 的形式将x 和否定的y 系数放入矩阵A。对于xy,这些系数是m-1。将它们的否定截距放入向量b
  4. solve 的输出将为您提供两条线相交处的 xy 值(按此顺序)。
fit <- lm(mag~outer)
plot(outer, mag) #plot outer points
abline(fit) #line of best fit 
abline(inner[1], mag[1]) #add inner line

A <- matrix(c(coef(fit)[2], -1,
              mag[1], -1), byrow = T, nrow = 2)

b <- c(-coef(fit)[1], -inner[1])
(coord <- solve(A, b))
[1]   1.185901 239.256914

points(coord[1], coord[2], col = "red")

【讨论】:

  • 谢谢!很有帮助
【解决方案2】:

从斜率/截距 (m/b) 回归输出生成直线方程。所以

reg1 <- lm(y1 ~ x1)
reg2 <- lm(y2 ~ x2)

提供斜率 (m1, m2) 和截距 (b1, b2)

y1 = m1x1 + b1

y2 = m2x2 + b2

因为 x1 = x2 = x 并且 y1 = y2 = y 那么

m1x - y = -b1

m2x - y = -b2

您可以求解 x,y 未知数的方程。

【讨论】:

  • 如何生成直线方程?
  • 使用基本 R 回归函数查看更新。
  • 谢谢!这对我很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多