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

2024-03-11

我正在用 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) 

这是一张试图澄清这一点的图片:

我该如何解决这个问题?


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

假设您的枪位于轴的 (0, 0) 点,以便计算以弧度表示的角度。一旦获得该角度,您就可以使用该角度进行其余的计算。

请注意,由于角度以弧度为单位,因此您需要在代码中使用 math.pi 而不是 180 度。另外,不需要进行超过 360 度 (2*math.pi) 的测试。负值 (

计算枪和目标之间角度的代码是

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

如果要将弧度转换为度数

mydegrees = math.degrees(myradians)

将度数转换为弧度

myradians = math.radians(mydegrees)

Python ATAN2 http://www.tutorialgateway.org/python-atan2/

Python ATAN2 函数是 Python 数学函数之一,它是 用于返回从 X 轴到坐标轴的角度(以弧度为单位) 指定点 (y, x)。

数学.atan2() https://sites.google.com/a/pythontkinter.com/tkinter/mathatan2

定义返回半径的正切(y,x)。

Syntax
math.atan2(y,x)

参数
y,x=数字

Examples
回报是:

>>> import math  
>>> math.atan2(88,34)  
1.202100424136847  
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道两个向量之间的角度? 的相关文章

随机推荐

  • 这段代码使用 wstring 和 MultiByteToWideChar 安全吗?

    Using std wstring我现在的样子MultiByteToWideChar std wstring widen const std string in int len MultiByteToWideChar CP UTF8 0 i
  • Pandas:将列的值分配给字典值设置的限制

    我怎样才能删除iterrows 使用 numpy 或 pandas 可以更快地完成此操作吗 import pandas as pd import numpy as np df pd DataFrame A foo bar foo bar f
  • 获取没有滚动条的UITableView的高度

    我需要获得一个的完整高度UITableView 即没有更多内容可滚动的高度 有什么办法可以做到这一点吗 我试过了 tableView sizeThatFits CGSizeZero 但只返回 0x0CGSize Try the conten
  • GitHub 项目最新版本的下载链接

    我正在尝试向我的网站添加一个项目最新 github 版本的下载链接 例如链接https github com mongodb mongo archive r3 0 0 rc7 zip https github com mongodb mon
  • 无法恢复几何备份 MySQL 5.7 错误

    我一直在从 Mysql 升级网站5 6 to 5 7 当从以下位置恢复备份时mysqldump 在Mysql 5 1 5 6下工作了10年 不变 在MySQL下不再工作5 7 具体来说 第一行几何数据恢复失败 ERROR 1416 2200
  • 特殊字符(夏威夷语“Okina”)导致奇怪的字符串行为

    The 夏威夷语报价 https en wikipedia org wiki CA BBOkina当 T SQL 与字符串函数结合使用时 它会出现一些奇怪的行为 这里发生了什么 我错过了什么吗 其他角色是否也遇到同样的问题 SELECT U
  • 打包时只生成一场战争

    默认情况下 JHipster 在打包阶段生成 2 个 war your project version war 和 your project version war original 第一个是可执行 jar 第二个是可以在 servlet
  • Clojure 中如何泄漏内存?

    为了周四在湾区 Clojure 聚会上的演讲 我正在整理一份 Clojure 中泄漏内存的方法列表 到目前为止我有 抓住无限序列的头部 通过在循环中调用 lambda 创建大量泛型类 这仍然是一个问题 保存对未使用数据的引用 还有什么 通过
  • 显式遵守 Codable 删除了结构上的成员初始化程序生成

    Given struct Foo let bar Bar 我得到了一个方便的初始化程序来使用 let foo Foo bar Bar But if Bar不是它本身Codable 或者由于某些其他原因我需要明确实现Codable on Fo
  • React - 反应脚本 publicPath

    是否有可能覆盖开发环境的反应脚本中的 publicPath 我使用 symfony 并且在 twig 中包含了 React 应用程序 所以我必须更改资产来提供服务http localhost 3000 static js bundle js
  • SetWindowPos() 函数不移动窗口?

    我有一个对话框 我想将其放置在另一个对话框中 并相对于主对话框上的其中一个控件进行定位 void CspAceDlg DrawResultsArea CWnd pTabCtl GetDlgItem IDC BUILDTABS CRect r
  • 由于 GCM SenderId Android 无法生成 APK 版本

    我在我的应用程序中实现了 GCM Google Cloud Messaging Google Play 服务库已自动生成values xml其中我的senderId is
  • 如何在android VideoView中显示Youtube视频? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 android 应用程序
  • 使用 Jquery 更改选择值

    我正在尝试使用 Jquery 更改表单中 选择 输入的值 但是当它更改时 该更改的函数不起作用 HTML
  • servlet 的根 URl

    我想从其中一个 servlet 获取 Web 应用程序的根 url 如果我将应用程序部署在 www mydomain com 中 我想获得像 http www mydomain com http www mydomain com 同样的事情
  • 使用 Neo4j 的 Cypher 返回我的朋友和朋友的朋友

    我有具有双向关系的节点 如下 我正在尝试创建一个查询 我想返回特定节点的所有后续节点及其后续节点的后续节点 3 希望深度 例如假设这些关系 gt 符号跟随 A gt B B gt A B gt C C gt B C gt D D gt C
  • Spring Data Mongo - 如何映射继承的 POJO 实体?

    我对 Spring 还很陌生 但我想在这个项目上尝试一下 我有一个 MongoDB 数据库 其中填充了相当复杂的文档 我想使用 Spring data Mongo 来查询 没有其他 CRUD 操作 数据库 我已经使用 POJO 描述了我的文
  • 如何一次处理 RxJS 流 n 个项目,并在完成一个项目后,再次自动填充回 n 个项目?

    我有一个事件流 我想调用一个函数 为每个事件返回一个承诺 问题是这个函数非常昂贵 所以我想一次最多处理 n 个事件 这个卵石图可能是错误的 但这就是我想要的 x x xxxxxxx x gt Events p p pppp p p p p
  • 从版本控制中检出项目失败

    我正在 Mac 上使用 Android Studio 1 0 2 为 Google Glass 开发应用程序 我一直在尝试从 Google 在 github 上提供的推荐项目之一开始 但我遇到了问题 说明显示要打开 Android Stud
  • 如何知道两个向量之间的角度?

    我正在用 pygame 制作小游戏 并且制作了一把围绕其中心旋转的枪 我的问题是我想让枪自行旋转到敌人的方向 但我无法做到这一点 因为我找不到枪和敌人之间的角度来使枪旋转到敌人的方向 我搜索过 发现我必须使用atan2但我没有找到任何工作代