gpt4 book ai didi

python - 如何知道两个向量之间的角度?

转载 作者:太空狗 更新时间:2023-10-29 22:01:51 25 4
gpt4 key购买 nike

我正在用 pygame 制作小游戏,我制作了一把围绕其中心旋转的枪。我的问题是我想让枪自己旋转到敌人的方向,但我做不到,因为我找不到枪和敌人之间的角度来让枪旋转到它我进行了搜索,发现我必须使用 atan2,但我没有找到任何有效的代码,所以我希望有人能帮助我。

这是我的代码:

import pygame
from pygame.locals import*
pygame.init()
height=650
width=650
screen=pygame.display.set_mode((height,width))
clock=pygame.time.Clock()
gun=pygame.image.load("m2.png").convert_alpha()
gun=pygame.transform.smoothscale(gun,(200,200)).convert_alpha()
angle=0
angle_change=0
RED=(255,0,0)
x=525
y=155
while True :
screen.fill((150,150,150))
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
quit()
if event.type==KEYDOWN:
if event.key==K_a:
angle_change=+1
if event.key==K_d:
angle_change=-1
elif event.type==KEYUP:
angle_change=0
angle+=angle_change
if angle>360:
angle=0
if angle<0:
angle=360
pygame.draw.rect(screen,RED,(x,y,64,64))
position = (height/2,width/2)
gun_rotate=pygame.transform.rotate(gun,angle)
rotate_rect = gun_rotate.get_rect()
rotate_rect.center = position
screen.blit(gun_rotate, rotate_rect)
pygame.display.update()
clock.tick(60)

这里有一张图片试图说明这一点:

enter image description here

我该如何解决这个问题?

最佳答案

两点之间夹角的正切定义为 delta y/delta x即 (y2 - y1)/(x2-x1)。这意味着 math.atan2(dy, dx) 给出两点之间的角度假设您知道定义坐标的基轴。

为了计算以弧度为单位的角度,假设您的枪是轴的 (0, 0) 点。获得该角度后,您就可以使用该角度进行剩余的计算。

请注意,由于角度以弧度为单位,因此您需要在代码中使用 math.pi 而不是 180 度。也不需要超过 360 度 (2*math.pi) 的测试。负数 (< 0) 的测试是不正确的,因为您随后将其强制为 0,这会强制目标在正方向上位于 x 轴上。

计算枪与目标之间角度的代码如下

myradians = math.atan2(targetY-gunY, targetX-gunX)

如果你想将弧度转换成度数

mydegrees = math.degrees(myradians)

将度数转换为弧度

myradians = math.radians(mydegrees)

Python ATAN2

The Python ATAN2 function is one of the Python Math function which is used to returns the angle (in radians) from the X -Axis to the specified point (y, x).

math.atan2()

Definition Returns the tangent(y,x) in radius.

Syntax
math.atan2(y,x)

Parameters
y,x=numbers

Examples
The return is:

>>> import math  
>>> math.atan2(88,34)
1.202100424136847
>>>

关于python - 如何知道两个向量之间的角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42258637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com