我无法正确绕点旋转。
我要实现的功能是围绕正方形的中心旋转一个正方形的4个角。然后,我显示旋转的正方形。我需要它来测试其他一些功能。
现在发生的是点之间的距离没有保留。对于pi/2 I get a diagonal和pi/5 a "diamond"。
我认为这可能与imshow使用的坐标系中的y轴发生翻转(值向下增加)有关。我玩过指示牌,但没有设法正确。请帮助我找到错误!
## Define corners of a square
p1 = [200,200] #[x,y]
p2 = [200,300]
p3 = [300,300]
p4 = [300,200]
## Choose the angle of rotation
rotAng = math.pi/3
## Rotate the corners
p1 = rotPt(p1, rotAng)
p2 = rotPt(p2, rotAng)
p3 = rotPt(p3, rotAng)
p4 = rotPt(p4, rotAng)
## Display square as a polyline
img = np.zeros((640,480,3), np.uint8) #creates an empty image
pts = np.array([p1,p2,p3,p4], np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(255,255,255), thickness = 3)
## View the image
depth_image = np.asanyarray(img)
cv2.imshow('depth_image', depth_image)
def rotPt((x, y), th):
cx = 250
cy = 250 #centre of square coords
x -= cx
y -= cy
x = x*math.cos(th) - y*math.sin(th)
y = x*math.sin(th) + y*math.cos(th)
x += cx
y += cy
return [x,y]
答案 0 :(得分:2)
在第二行中,使用x的 changed 值。
x = x*math.cos(th) - y*math.sin(th)
y = x*math.sin(th) + y*math.cos(th)
请记住并使用旧值。
xx = x
x = x*math.cos(th) - y*math.sin(th)
y = xx * math.sin(th) + y*math.cos(th)