向量

Godot Vector(向量)

向量

在二维空间中,坐标是用水平轴(x)和垂直轴(y)来定义的。二维空间中的一个特定位置被写成一对值,如(4,3)。
在这里插入图片描述
用这种方法,二维平面上的任何位置都可以用一对数字来识别。但是,我们也可以把位置(4,3)看作是与(0,0)点或原点的偏移。画一个从原点指向点的箭头:
在这里插入图片描述
这是一个向量。向量表示许多有用的信息。除了告诉我们这个点在(4,3),我们也可以把它看作一个角度θ和一个长度(或大小)m。在这种情况下,箭头是一个位置向量——它表示相对于原点的空间位置。

要考虑向量的一个非常重要的一点是,它们只表示相对的方向和大小。没有向量位置的概念。以下两个向量是相同的:
在这里插入图片描述
两个向量都表示一个点在某个起始点的右边4个单位和下面3个单位。无论你在平面的哪个位置画向量,它总是表示一个相对的方向和大小。

向量的加法

我们也可以通过在第一个向量的末尾加上第二个向量来直观地看到这一点:
在这里插入图片描述
注意,a + b得到的结果与b + a相同

标量乘法

向量同时表示方向和大小。只表示大小的值称为标量。

一个向量可以乘以一个标量:
在这里插入图片描述
一个向量乘以一个标量不会改变它的方向,只改变它的大小。这就是向量缩放的方法。

实际应用

让我们看看向量加法和减法的两种常见用法:

移动

向量可以表示任何具有大小和方向的量。典型的例子有:位置、速度、加速度和力。在这个图像中,第1步的飞船的位置向量是(1,3),速度向量是(2,1)。速度向量表示每一步船移动的距离。我们可以通过将速度添加到当前位置来找到第2步的位置。

在这里插入图片描述
速度测量的是单位时间内位置的变化量。通过在原来的位置上加上速度,可以找到新的位置。

指向目标

在这个场景中,你有一辆坦克,它希望将炮塔对准一个机器人。机器人的位置减去坦克的位置就得到了从坦克指向机器人的向量。
在这里插入图片描述
要找到一个从 a 指向 b 的向量,可以使用 b-a。

单位向量

大小为1的向量称为单位向量。它们有时也被称为方向向量或法线。当你需要跟踪一个方向时,单位向量是有用的.

Normalization

将一个向量归一化意味着将它的长度减小到1,同时保持它的方向。这是通过每个分量除以它的大小来实现的。因为这是一个非常常见的操作,所以Vector2和Vector3提供了一种归一化的方法:

a = a.normalized()

因为标准化涉及到除以向量的长度,你不能标准化一个长度为0的向量。尝试这样做会导致错误。

反射

单位向量的一个常见用法是表示法线。法向量是垂直于表面的单位向量,定义了它的方向。它们通常用于照明、碰撞和其他涉及表面的操作。
例如,假设我们有一个移动的球,我们想从墙壁或其他物体上弹回来
在这里插入图片描述
法线表面的值是(0,-1)因为这是一个水平面的。当球碰撞时,我们用法线反射它的剩余运动(当它撞击表面时剩余的运动)。在Godot中,Vector2类有一个bounce()方法来处理这个问题。下面是一个使用KinematicBody2D的GDScript示例图:

# object "collision" contains information about the collision
var collision = move_and_collide(velocity * delta)
if collision:
    var reflect = collision.remainder.bounce(collision.normal)
    velocity = velocity.bounce(collision.normal)
    move_and_collide(reflect)

这里先回顾一下三角函数:

直角三角形三角函数定义

在直角三角形中,当平面上的三点A、B、C的连线,AB、AC、BC,构成一个直角三角形,其中∠ACB为直角。对∠BAC而言,对边(opposite)a=BC、斜边(hypotenuse)c=AB、邻边(adjacent)b=AC,则存在以下关系:
在这里插入图片描述
在这里插入图片描述
sin∠A=a/c
cos∠A=b/c
tan∠A=a/b

在这里插入图片描述
我们做函数图像,于是有,正弦函数图:
在这里插入图片描述
sin(0)=0,sin(90)=1.

余弦函数图:
在这里插入图片描述
cos(0)=1,cos(90)=0.

余弦定理

余弦定理,欧氏平面几何学基本定理。余弦定理是描述三角形中三边长度与一个角的余弦值关系的数学定理,勾股定理是余弦定理的特例。

公式含义

对于任意三角形,任何一边的平方等于其他两边平方的和减去这两边与它们夹角的余弦的积的两倍。
若三边为a,b,c 三角为A( α),B(β ),C( γ),则如下图所示,在△ABC中,
在这里插入图片描述
余弦定理表达式1
在这里插入图片描述
同理,也可描述为:
在这里插入图片描述在这里插入图片描述

勾股定理是余弦定理的特例,当γ 为90°时,cosγ =0 ,余弦定理可简化为 c 2 = a 2 + b 2 c^2=a^2+b^2 c2=a2+b2 ,即勾股定理。
回到介绍向量。

点积

点积是向量数学中最重要的概念之一,但经常被误解。点积是对两个向量的运算,它返回一个标量。与同时包含大小和方向的向量不同,标量值只有大小。

定义

点积有两种定义方式:代数方式和几何方式。通过在欧氏空间中引入笛卡尔坐标系,向量之间的点积既可以由向量坐标的代数运算得出,也可以通过引入两个向量的长度和角度等几何概念来求解。我们关注几何定义。

几何定义

设二维空间内有两个向量 ab ,|a|和|b| 表示向量ab的大小,它们的夹角为 θ(0 ≤ θ ≥ π),则点积定义为以下实数:
a·b = |a||b|cosθ
该定义只对二维和三维空间有效。

意义

点积的几何意义包括:

  1. 计算两个向量之间的夹角
  2. 第一个向量投影到第二个向量上(这里,向量的顺序是不重要的,点积运算是可交换的)

推导

在这里插入图片描述

在这里插入图片描述也就是 a·b = |a||b|cosθ

然而,在大多数情况下,使用内置方法是最容易的。注意,两个向量的顺序无关紧要:

var c = a.dot(b)
var d = b.dot(a) # These are equivalent.

点积在单位向量中最有用,可以使 |a||b|cosθ公式简化为cosθ。这意味着我们可以用点积来告诉我们关于两个向量夹角的信息。
a·b = |1||1|cosθ
a·b =cosθ
在这里插入图片描述
当使用单位向量时,结果总是在-1(180度)和1(0度)之间。

朝向

我们可以利用这个事实来检测一个物体是否正对着另一个物体。在下面的图表中,玩家P试图避开僵尸A和b。假设僵尸的视野是180度,他们能看到玩家吗?
在这里插入图片描述
绿色箭头fA和fB是单位矢量,代表僵尸面向的方向,蓝色半圆代表僵尸的视野。对于zombie A,我们使用P - A找到指向玩家的方向的向量AP并将其归一化,然而,Godot有一个助手方法来做这个,叫做direction_to。如果这个向量和面对的向量之间的角度小于90度,那么僵尸就可以看到玩家。
代码:

if AP.dot(fA) > 0:
    print("A sees P!")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值