Pygame中旋转护卫舰图像后炮塔位置计算偏差问题
Pygame护卫舰旋转后炮塔位置计算问题
我在Pygame中拥有一个初始旋转角度为0°的护卫舰图像对象,需要计算该护卫舰旋转指定角度(如90°)后炮塔的新位置。
我先执行图像旋转操作:
rotatedFrigate = pygame.transform.rotate(gui.frigate[0], facingAngle)
随后尝试了多种方法计算炮塔位置,但结果大多偏差较大,偶尔接近正确位置:
旋转点向量方法:
point = pygame.math.Vector2(turretx, turretY) rotated_point = point.rotate(facingAngle) t1x,t1y = rotated_point[0]+point[0], rotated_point[1]+point[1]基于中点的旋转矩阵方法:
xm,ym = self.x + 0.5*self.w,self.y + 0.5*self.h a = math.radians(facingAngle) # 转换为弧度 xr = (x - xm) * math.cos(a) - (y - ym) * math.sin(a) + xm yr = (x - xm) * math.sin(a) + (y - ym) * math.cos(a) + ym rotatedFrigate = pygame.transform.rotate(gui.frigate[0], facingAngle) t1x,t1y = xr + 0.5*rotatedFrigate.get_width(),yr+ 0.5*rotatedFrigate.get_height()
基础定义
炮塔初始位置定义为:
turretx, turretY = self.x,self.y+0.05*self.h
其中self指代旋转前护卫舰的坐标,护卫舰图像中心坐标计算方式为:
xm,ym = self.x + 0.5*self.w,self.y + 0.5*self.h
w和h为旋转前护卫舰图像的宽高(通过get_width()、get_height()方法获取)。
补充效果
使用rotated_point = (point - pivot).rotate(-facingAngle) + pivot后的效果如图:
内容的提问来源于stack exchange,提问作者Murchie85
相关产品推荐
相关产品推荐

