平行线的旋转

时间:2013-11-18 14:36:52

标签: r rotation

在图中考虑这两个平行段。

plot(c(1, 6), c(2, 2), type="n", xlim=c(0, 7), ylim=c(-2, 6))
segments(1, 1, 6, 1)
segments(1, 3, 6, 3)

如何以规定的角度将两条线旋转在一起?

提前谢谢大家。

最佳, 安东尼奥


答案后的一些观察结果。

如果我们使用将笛卡尔空间中的线段的度数返回到示例中使用的线段的函数:

segments(1, 1, 6, 1)
angle <- function(x, y) return( atan2((y[2]-y[1]), (x[2]-x[1]))*(180/pi) )

然后我们得到零度,因为它是一条水平线。

angle(c(1, 6), c(1, 1))
[1] 0

但是,通过应用提供的功能:

> xyrot<-function(pairs,ang){
>     # pairs must be Nx2 matrix w/ x in first column and y in second
>     xrot <- pairs[,1]*cos(ang) - pairs[,2]*sin(ang)
>     yrot <- pairs[,1]*sin(ang) + pairs[,2]*cos(ang)
>     return(invisible(cbind(xrot,yrot))) }

将段示例旋转90度......

rot90 <- xyrot(matrix(data=c(1, 1, 6, 1), nrow=2, ncol=2, byrow=TRUE), 90)

...然后返回的角度高于90度。

angle(as.vector(c(rot90[1,1],rot90[2,1])), as.vector(c(rot90[1,2],rot90[2,2])))
[1] 116.6202

情节也没有显示垂直线。

plot(rot90)
segments(rot90[1,1], rot90[1,2], rot90[2,1], rot90[2,2])

我错过了什么吗?


Sí,ang应该是弧度:)

1 个答案:

答案 0 :(得分:4)

像这样:

# coordinate transform: cartesian plane rotation
xyrot<-function(pairs,ang){
    # pairs must be Nx2 matrix w/ x in first column and y in second
    xrot <- pairs[,1]*cos(ang) - pairs[,2]*sin(ang)
    yrot <- pairs[,1]*sin(ang) + pairs[,2]*cos(ang)
    return(invisible(cbind(xrot,yrot)))
}