向量旋转平移

已知旋转角度和旋转点和旋转后向量的模

  1. 计算向量的方向;
  2. 计算旋转后的角;
  3. 将已知的旋转后向量的模向x和y两个方向投影
  4. 旋转点分别加上投影后的长度即可得到旋转后另一端点坐标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def vectorTransform(p1, p2, p, angle, l):
"""
Function:
get the point by vector transform
Parameters:
p1: [x, y], the start point of vector
p2: [x, y], the end point of vector
p: [x, y], the start point of tansform
angle: radian , +:Counterclockwise, -:Clockwise
l: distance
Return:
transformed point
"""
d_l2 = math.sqrt((p2[1]-p1[1])**2+(p2[0]-p1[0])**2)
unit_vector = [(p2[0]-p1[0])/d_l2, (p2[1]-p1[1])/d_l2]
vector_angle = math.atan(unit_vector[1]/(unit_vector[0]+1e-20))
lx = l*math.cos(vector_angle+angle)
ly = l*math.sin(vector_angle+angle)

return [int(p[0]+lx), int(p[1]+ly)]
0%