二维坐标系旋转矩阵的求解(坐标系不变和坐标系改变两种情况)

1 围绕原点的旋转
如下图, 在2维坐标上,有一点p(x, y) , 直线opの长度为r, 直线op和x轴的正向的夹角为a。 直线op围绕原点做逆时针方向b度的旋转,到达p’ (s,t) 



s = r cos(a + b) = r cos(a)cos(b) – r sin(a)sin(b)   (1.1)
t = r sin(a + b) = r sin(a)cos(b) + r cos(a) sin(b)  (1.2)
其中 x = r cos(a)  , y = r sin(a)
代入(1.1), (1.2) ,
s = x cos(b) – y sin(b)    (1.3)
t = x sin(b) + y cos(b)    (1.4)

 


用行列式表达如下:

 

2.座标系的旋转
在原坐标系xoy中,  绕原点沿逆时针方向旋转theta度, 变成座标系 sot。
设有某点p,在原坐标系中的坐标为 (x, y), 旋转后的新坐标为(s, t)。



oa = y sin(theta)   (2.1)
as = x cos(theta)   (2.2)
综合(2.1),(2.2) 2式
s =  os = oa + as = x cos(theta) + y sin(theta) 
t =  ot = ay – ab = y cos(theta) – x sin(theta)

 

用行列式表达如下:

### 二维坐标系转换的数学公式与算法 #### 转换原理 在二维空间中,当需要将一个点从某个局部坐标系 \(X'O'Y'\) 映射到另一个全局坐标系 \(XOY\) 中时,可以通过旋转平移操作完成。具体来说,这种转换可以分为两部分:一是由于两个坐标系之间的相对旋转引起的坐标变化;二是由于两个坐标系之间的相对位移所导致的变化。 给定条件包括: - 坐标系 \(X'O'Y'\) 相对于 \(XOY\) 的偏移量 \((T_x, T_y)\)[^2]; - 坐标系 \(X'O'Y'\) 相对于 \(XOY\)旋转角度 \(\alpha\)[^2]; - 点 \(P(X', Y')\) 在局部坐标系中的位置。 目标是求解该点在全局坐标系中的位置 \((X, Y)\)。 通过几何推导可得以下公式: \[ X = X' \cos(\alpha) - Y' \sin(\alpha) + T_x \] \[ Y = X' \sin(\alpha) + Y' \cos(\alpha) + T_y \] 上述公式的矩阵形式为: \[ \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} = \begin{bmatrix} \cos(\alpha) & -\sin(\alpha) & T_x \\ \sin(\alpha) & \cos(\alpha) & T_y \\ 0 & 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} X' \\ Y' \\ 1 \end{bmatrix} \] 这里引入了齐次坐标的表示方式,即将二维向量扩展至三维来统一表达平移旋转变换的操作[^1]。 #### 实现代码示例 以下是基于 Python NumPy 库实现的一个简单例子,用于计算点在不同坐标系间的映射关系: ```python import numpy as np def transform_point(x_prime, y_prime, alpha, tx, ty): """ 将点 (x_prime, y_prime) 从局部坐标系转换到全局坐标系 参数: x_prime: 局部坐标系下点的横坐标 y_prime: 局部坐标系下点的纵坐标 alpha: 局部坐标系相对于全局坐标系旋转角(弧度制) tx: 局部坐标系原点相对于全局坐标系原点的水平偏移 ty: 局部坐标系原点相对于全局坐标系原点的竖直偏移 返回: tuple: 全局坐标系下的点坐标 (X, Y) """ # 构造变换矩阵 transformation_matrix = np.array([ [np.cos(alpha), -np.sin(alpha), tx], [np.sin(alpha), np.cos(alpha), ty], [0 , 0 , 1 ] ]) # 齐次坐标表示 point_homogeneous = np.array([x_prime, y_prime, 1]) # 执行变换 result = np.dot(transformation_matrix, point_homogeneous) return result[0], result[1] # 测试数据 x_prime_test = 3 y_prime_test = 4 alpha_test = np.radians(45) # 45 degrees converted to radians tx_test = 2 ty_test = 3 result_X, result_Y = transform_point(x_prime_test, y_prime_test, alpha_test, tx_test, ty_test) print(f"Transformed Point Coordinates: ({result_X}, {result_Y})") ``` 此函数实现了从局部坐标系到全局坐标系的转换过程,并利用齐次坐标简化了运算逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值