如果我的代码看起来非常业余,我会提前道歉。 我正在尝试将象限分配到大约位于城镇边缘的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
,然后计算相对于网格的角度。然而,我找不到一个适当的例子,我不认为我有一个很好的线性方程系统我可以解决。
我的代码是否已关闭?或许也许有人知道一个可以帮助我的套餐?感觉我的整个方法有点不对劲。
答案 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.1
和vec.2
到基础向量的角度:
e1 <- c(1, 0)
e2 <- c(0, 1)
正如你所做的那样。