R找到连接4个坐标的两条线的交点

时间:2014-06-04 12:55:12

标签: r

如果我的代码看起来非常业余,我会提前道歉。 我正在尝试将象限分配到大约位于城镇边缘的4个测量站。

我有这4个站的坐标:

a  <- c(13.2975,52.6556)
b  <- c(14.0083,52.5583)
c  <- c(13.3722,52.3997)
d  <- c(12.7417,52.6917)

现在我的想法是创建连接南北和东西站的线路:

line.1 <- matrix(c(d[1],b[1],d[2],b[2]),ncol=2)
line.2 <- matrix(c(a[1],c[1],a[2],c[2]),ncol=2)

绘制所有工作站的连接线看起来都很合适,但对于在计算机上进行分析不是很有帮助。

所以我计算了两行的eucledian向量:

vec.1 <- as.vector(c((b[1]-d[1]),(b[2]-d[2])))

vec.2 <- as.vector(c((c[1]-a[1]),(c[2]-a[2])))

允许我以度数计算两条线之间的角度:

alpha <- acos((vec.1%*%vec.2) / (sqrt(vec.1[1]^2+vec.1[2]^2)*  
          sqrt(vec.2[1]^2+vec.2[2]^2)))) * 180/pi

我得到的角度为67.7146°。这看起来相当不错。从这个角度我可以很容易地计算出交叉点的其他3个角度,但是我需要相对于网格的值,所以我可以为风向分配0°-360°的值。

现在我的下一个计划步骤是找到两条线相交的点,通过该点添加水平和垂直abline,然后计算相对于网格的角度。然而,我找不到一个适当的例子,我不认为我有一个很好的线性方程系统我可以解决。

我的代码是否已关闭?或许也许有人知道一个可以帮助我的套餐?感觉我的整个方法有点不对劲。

2 个答案:

答案 0 :(得分:0)

好吧,我设法使用线方程来计算交点。这是如何。

两点的基本等式如下:

y - y_1 = (y_2-y_1/x_2-x_1) * (x-x_1)

如果你为这两行中的每一行创建一个,你可以只替换这些分数。

k.1 <- ((c[2]-a[2])/(c[1]-a[1]))
k.2 <- ((b[2]-d[2])/(b[1]-d[1]))  

重塑这两个函数,您将得到y的最终表单:

y <- (((-k.1/k.2)*d[2]+k.1*d[1]-k.1*c[1]+d[2])/(1-k.1/k.2))

现在您可以使用这个来计算x - 值:

x <- ((y-d[2])+d[1]*k.2)/k.2

在我的情况下,我得到了

y = 52.62319

x = 13.3922

我开始真的很喜欢这个节目!

答案 1 :(得分:-1)

Wikipedia有一篇关于使用显式公式查找两个线段之间的交集的文章。但是,您不需要知道交点以计算与网格(或坐标系的轴)的角度。只需计算从vec.1vec.2到基础向量的角度:

e1 <- c(1, 0)
e2 <- c(0, 1)

正如你所做的那样。