Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中二维直线的旋转_Python_Rotation - Fatal编程技术网

python中二维直线的旋转

python中二维直线的旋转,python,rotation,Python,Rotation,我有一个小问题,我有在2D中旋转线的函数,它只在C[0]==C时工作,哪里应该是错误的?如果C[0]=C旋转线比原始线长 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 - coor

我有一个小问题,我有在2D中旋转线的函数,它只在C[0]==C时工作,哪里应该是错误的?如果C[0]=C旋转线比原始线长

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()


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

矢量在点空间中没有位置。如果
D
是旋转矩阵,则它们只是转换为
v'=Dv
,而不是像代码那样转换为
v'=D(v-c)+c

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

如果旋转中心不是原点,则此距离在旋转下不是不变的,而向量的长度在旋转下始终不变

问题编辑后再编辑:

您对Ca的减法是错误的。Numpy广播将导致从每行中减去中心,而不是从您想要的每列中减去中心。例如,您可以通过为
Ca
构建完整矩阵来解决此问题:

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

可能有更好的numpy解决方案来进行正确的形状铸造,我现在还不知道。

你是真的,我的问题有一个错误,我不是旋转向量,而是直线,起点在某个点,所以C必须影响它的位置。@MartinB更新了我的回答非常感谢你的帮助和解释;)