Python中的2D线条旋转

2024-04-19 12:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个小问题,我有二维旋转线的函数,它只在C[0]==C1时起作用,哪里会出错?如果C[0]!=C1旋转的线条比原始线条长。在

def rotmat(alpha):                    # angle in radians
    ca, sa = cos(alpha), sin(alpha)
    return array([[ca, -sa],[sa, ca]])

def rotate(X, Y, alpha, C=(0,0)):
    """
    X,Y - coordinates of points, C - center of rotation, default (0,0)

    """
    Ca = asarray(C)
    XY = asarray([X,Y])
    Xr,Yr = Ca + dot(rotmat(alpha), XY-Ca)
    return Xr,Yr

X = (1,2); Y=(2,1)
Xr,Yr = rotate(X,Y,pi/2.,(0.,5.))
plot(X,Y,Xr,Yr,'r')
axis('scaled')
show()

blue - original, red - rotated

蓝色是原始的,红色是旋转的


Tags: ofalphareturndefsa线条caxy
1条回答
网友
1楼 · 发布于 2024-04-19 12:21:34

向量在点空间中没有位置。如果D是旋转矩阵,那么它们只需转换为v' = Dv,而不是像您的代码那样转换成{}。在

你处理这个向量就像它代表了一个点的坐标,然后假设你在这些坐标中测量到原点的距离。在

如果旋转中心不是原点,那么这个距离在旋转下不是不变的,而向量的长度在旋转下总是不变的。在

编辑问题后编辑:

你的Ca的减法是错误的。Numpy广播将导致从每一行中减去中心,而不是像您所希望的那样从每列中减去中心。例如,您可以通过为Ca构造一个完整矩阵来解决此问题:

Ca = asarray([[C[0]]*len(X), [C[1]]*len(X)])

可能有更好的纽比解决方案来做正确的形状铸造,我现在不知道。在

相关问题 更多 >