寻找有 2 个点的向量

2023-12-04

我正在帮助我的朋友玩 pygame,但我们被困住了

所以我们正在尝试获取射弹的方向,但我们不知道如何获取

例如:

[1,1] 将走向东南

[1,-1] 将走向 NE

[-1,-1] 将走向西北

和 [-1,1] 将去 SW

我们需要某种方程来获取玩家位置和鼠标位置并找出射弹需要移动的方向

这是我们插入向量的地方:

def update(self):

    self.rect.x += self.vector[0]
    self.rect.y += self.vector[1]

然后我们在直角坐标处将弹丸传输到


因此,首先您需要获取从玩家到光标的矢量距离。减去两个点就可以得到它们之间的向量:

distance = [mouse.x - player.x, mouse.y - player.y]

现在,你想要将其归一化为单位向量。要做到这一点,你只需得到规范(通过勾股定理),并将向量除以范数:

norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
direction = [distance[0] / norm, distance[1] / norm]

最后,您想要velocity向量。你可以通过相乘方向(单位向量)除以速度。

因为您希望向 SE 发射的子弹具有向量[1, 1],您(大概)希望所有子弹都以该速度矢量的速度移动,即sqrt(2)(再次通过毕达哥拉斯定理)。所以:

bullet_vector = [direction[0] * math.sqrt(2), direction[1] * math.sqrt(2)]

就是这样。


Here你可以看到这段代码正在运行。 (这是一个交互式可视化工具,因此如果有任何部分您不理解,您可以逐步浏览它。)

我创建了一个播放器[10.0, 25.0],并且鼠标指针偏离大致(但不完全)东南方向[30.0, 70.0], and bullet_vector最终成为[0.5743665268941905, 1.2923246855119288],一个矢量,以速度指向相同的东南方向sqrt(2).

这说明它可以往东南方向走(如果你想去exactly东南方向,换乘8号线至mouse = Point(30.0, 45.0)),它可以向除 8 个罗盘点以外的方向行驶,并且始终以相同的速度行驶。

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

寻找有 2 个点的向量 的相关文章

随机推荐

  • 使用 rowspan 时 IE 设置行高不起作用

    只是想知道为什么下面的 HTML 不起作用 基本上 当我在表行上设置 rowspan 时 IE 似乎会忽略我设置的高度 table border 1 cellpadding 0 cellspacing 0 width 100 tr td h
  • 如何在 HLSL 中使用巨大数组(错误 X4505)

    当我尝试编译时出现错误 X4505 临时寄存器和可转位临时寄存器的总和超出限制 共 4096 个 然而我的shader确实工作于特效作曲家 它崩溃的原因可能是因为我使用了一个非常大的数组 因为我使用的是行进立方体 const static
  • 如何修复我的 Android Soundboard 应用程序的“Google 移动广告 SDK 初始化不正确”问题

    将 Google 广告横幅添加到我的 Android Studio 项目不起作用 如果有人能帮助我 我将非常非常感激 我只是不明白我做错了什么 我遵循的教程是 https www youtube com watch v w7muIkMYE
  • 在 Android 中创建一个空位图并通过画布进行绘制

    我想创建一个空位图并将画布设置为该位图 然后在位图上绘制任何形状 这可能比您想象的更简单 int w WIDTH PX h HEIGHT PX Bitmap Config conf Bitmap Config ARGB 8888 see o
  • 换行符
    未按预期呈现

    知道为什么我的果岭上方有一条细细的灰线吗 and how to get rid of it Thanks https jsfiddle net Lc7gym88 hr border bottom 4px solid 469551 width
  • JTable自定义单元格渲染器焦点问题

    我有一张这样的桌子 第二列使用 JTextField 渲染器 第三列使用基于 JPasswordField 的渲染器和编辑器 看起来不错 但问题是我们必须输入值并且必须按 ENTER 在该图像中 我输入了密码 但没有按 Enter 键 因此
  • VB.NET 根据 XSD 文件验证 XML 文件并解析 xml

    我需要做什么 我需要根据 XSD 文件 传递文件路径 位置 验证 XML 文件 传递文件路径 位置 我需要检查它的格式是否正确 没有非法字符 并且它具有 XSD 中定义的所有标签 即没有丢失标签 它与 xsd 中定义的数据类型匹配 完成之后
  • ARM统一汇编语言语法和解析器?

    是否有 ARM 统一汇编语言的公开语法或解析器 如ARM 架构参考手册 A4 2 本文档使用 ARM 统一汇编语言 UAL 此汇编语言语法为所有 ARM 和 Thumb 指令提供了规范形式 UAL 描述了每条指令的助记符和操作数的语法 只是
  • 如何正确使用KeyPressEvent

    尝试为我的表单创建热键 code private void FormMain KeyPress object sender KeyPressEventArgs e if e KeyChar char Keys Enter MessageBo
  • 在 php 查询中连接 3 个表有困难

    我的数据库有 3 个表 我希望在选择查询中访问 但我似乎无法让它工作 从 2 个表中进行选择效果很好 所以我知道除了从 3 个表中进行选择的代码之外 其他一切都正常工作 我的数据库已在 PHPmyadmin 上创建 表格如下 论坛回复 re
  • 嵌入 Firebird 和 Entity Framework 6 时出现“未知数据类型”错误

    我使用的是嵌入式 Firebird 数据库 代码优先 实体框架 6 应用程序第一次运行时 它工作正常 创建数据库并插入数据 但此后每次运行时都会抛出以下异常 发生 System NotSupportedException 类型的异常 Fir
  • 为什么它停止并以退出代码 11 结束?

    我不知道为什么它停在那里并以退出代码 11 结束 它应该一直运行直到我发出命令 include
  • 根据 json 值路由到不同的操作

    我想根据特定 json 参数的值将请求路由到不同的操作 例如 给定以下 json 数据 type type1 type1data type1value and type type2 type2data type2value 我希望能够在我的
  • android AlarmManager 无法唤醒手机

    我想要在某个时间显示一个活动 为此 我使用 AlarmManager 当设备唤醒时它可以正常工作 但如果设备处于睡眠状态则不会唤醒它 我设置闹钟的代码 Calendar alarmTime Calendar getInstance alar
  • 为什么不评估 && 运算符的右侧? [复制]

    这个问题在这里已经有答案了 小疑问 为什么下面代码的输出是1 为什么不3 int i 0 boolean t true f false b b t i 0 b f i 2 gt 0 System out println i 条件与运算符 是
  • 在 MVC6 中创建自定义模型绑定器的正确方法是什么?

    我正在尝试按照中的步骤操作本文使用 vNext 项目和 mvc 6 我一直在阅读代码here但仍然有点不确定如何实现这一点 有没有人有一个可以分享的可行示例或为我指明正确的方向 我特别想知道如何注册自定义绑定器 以及我将从哪些类继承 因为
  • 具有不同数据类型答案的调查的 SQL 设计

    我正在开展一项在线调查 大多数问题的答案等级为 1 5 如果我们需要向调查添加问题 我会使用一个简单的 Web 表单 该表单会插入到相应的表中 瞧 调查提出了新问题 没有新代码或对数据库结构进行更改 我们被要求添加可以有不同数据类型答案的调
  • 如何保存Jenkins配置?

    有没有办法在 Git 或其他任何地方保存管道配置或项目配置 以便当我的 Jenkins 机器崩溃时 我可以将保存的配置迁移到新的 Jenkins 实例中 我会 作为开始 让自己 https wiki jenkins io display J
  • 有没有一个库可以模拟 facebook 的“Link Detect”? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找编写一个库 可以
  • 寻找有 2 个点的向量

    我正在帮助我的朋友玩 pygame 但我们被困住了 所以我们正在尝试获取射弹的方向 但我们不知道如何获取 例如 1 1 将走向东南 1 1 将走向 NE 1 1 将走向西北 和 1 1 将去 SW 我们需要某种方程来获取玩家位置和鼠标位置并