Vector3

使用浮点坐标的3D向量。

描述

一种3元素结构,可用于表示3D坐标或任何其他数值三元组。

它使用浮点坐标。默认情况下,这些浮点值使用32位精度,与始终为64位的float不同。如果需要双精度,请使用选项精度=双编译引擎。

有关其整数对应项,请参见Vector3i

注意:在布尔上下文中,如果Vector3等于Vector3(0,0,0),则Vector3将评估为false。否则,Vector3将始终评估为true

属性

float

x

0.0

float

y

0.0

float

z

0.0

构造函数

方法

Vector3

abs() const

float

angle_to(to: Vector3) const

Vector3

bezier_derivative(control_1: Vector3, control_2: Vector3, end: Vector3, t: float) const

Vector3

bezier_interpolate(control_1: Vector3, control_2: Vector3, end: Vector3, t: float) const

Vector3

bounce(n: Vector3) const

Vector3

ceil() const

Vector3

clamp(min: Vector3, max: Vector3) const

Vector3

clampf(min: float, max: float) const

Vector3

cross(with: Vector3) const

Vector3

cubic_interpolate(b: Vector3, pre_a: Vector3, post_b: Vector3, weight: float) const

Vector3

cubic_interpolate_in_time(b: Vector3, pre_a: Vector3, post_b: Vector3, weight: float, b_t: float, pre_a_t: float, post_b_t: float) const

Vector3

direction_to(to: Vector3) const

float

distance_squared_to(to: Vector3) const

float

distance_to(to: Vector3) const

float

dot(with: Vector3) const

Vector3

floor() const

Vector3

inverse() const

bool

is_equal_approx(to: Vector3) const

bool

is_finite() const

bool

is_normalized() const

bool

is_zero_approx() const

float

length() const

float

length_squared() const

Vector3

lerp(to: Vector3, weight: float) const

Vector3

limit_length(length: float = 1.0) const

Vector3

max(with: Vector3) const

int

max_axis_index() const

Vector3

maxf(with: float) const

Vector3

min(with: Vector3) const

int

min_axis_index() const

Vector3

minf(with: float) const

Vector3

move_toward(to: Vector3, delta: float) const

Vector3

normalized() const

Vector3

octahedron_decode(uv: Vector2) static

Vector2

octahedron_encode() const

Basis

outer(with: Vector3) const

Vector3

posmod(mod: float) const

Vector3

posmodv(modv: Vector3) const

Vector3

project(b: Vector3) const

Vector3

reflect(n: Vector3) const

Vector3

rotated(axis: Vector3, angle: float) const

Vector3

round() const

Vector3

sign() const

float

signed_angle_to(to: Vector3, axis: Vector3) const

Vector3

slerp(to: Vector3, weight: float) const

Vector3

slide(n: Vector3) const

Vector3

snapped(step: Vector3) const

Vector3

snappedf(step: float) const

运算符


枚举

enum Axis: 🔗

Axis AXIS_X = 0

X轴的枚举值。由max_axis_index()min_axis_index()返回。

Axis AXIS_Y = 1

Y轴的枚举值。由max_axis_index()min_axis_index()返回。

Axis AXIS_Z = 2

Z轴的枚举值。由max_axis_index()min_axis_index()返回。


常量

ZERO = Vector3(0, 0, 0) 🔗

零向量,所有分量都设置为0的向量。

ONE = Vector3(1, 1, 1) 🔗

一个向量,所有分量都设置为1的向量。

INF = Vector3(inf, inf, inf) 🔗

无穷大向量,所有分量都设置为@S3Script.INF的向量。

LEFT = Vector3(-1, 0, 0) 🔗

左单位向量。表示左的局部方向和西的全局方向。

RIGHT = Vector3(1, 0, 0) 🔗

右单位向量。表示右的局部方向和东的全局方向。

UP = Vector3(0, 1, 0) 🔗

向上单位向量。

DOWN = Vector3(0, -1, 0) 🔗

向下单位向量。

FORWARD = Vector3(0, 0, -1) 🔗

向前单位向量。表示局部向前方向和全局向北方向。请记住,光源、摄像机等的向前方向不同于角色等3D资产,角色按照惯例面向摄像机。在3D资产空间中工作时使用MODEL_FRONT和类似的常量。

BACK = Vector3(0, 0, 1) 🔗

向后单位向量。表示背面的局部方向,以及南方的全局方向。

MODEL_LEFT = Vector3(1, 0, 0) 🔗

单位向量指向导入的3D资产的左侧。

MODEL_RIGHT = Vector3(-1, 0, 0) 🔗

单位向量指向导入的3D资产的右侧。

MODEL_TOP = Vector3(0, 1, 0) 🔗

单位向量指向导入的3D资产的顶部(上)。

MODEL_BOTTOM = Vector3(0, -1, 0) 🔗

单位向量指向导入的3D资产的底部(向下)。

MODEL_FRONT = Vector3(0, 0, 1) 🔗

单位向量指向导入的3D资产的正面(面向前方)。

MODEL_REAR = Vector3(0, 0, -1) 🔗

单位向量指向导入的3D资产的后侧(背面)。


属性说明

float x = 0.0 🔗

向量的X分量。也可以使用索引位置[0]访问。


float y = 0.0 🔗

向量的Y分量。也可以使用索引位置[1]访问。


float z = 0.0 🔗

向量的Z分量。也可以使用索引位置[2]访问。


构造函数说明

Vector3 Vector3() 🔗

构造一个默认初始化的Vector3,所有组件都设置为0


Vector3 Vector3(from: Vector3)

构造一个Vector3作为给定Vector3的副本。


Vector3 Vector3(from: Vector3i)

Vector3i构造一个新的Vector3


Vector3 Vector3(x: float, y: float, z: float)

返回具有给定组件的Vector3


方法说明

Vector3 abs() const 🔗

返回一个新向量,其中所有分量都为绝对值(即正)。


float angle_to(to: Vector3) const 🔗

返回给定向量的无符号最小角度,以弧度为单位。


Vector3 bezier_derivative(control_1: Vector3, control_2: Vector3, end: Vector3, t: float) const 🔗

返回由该向量定义的贝塞尔曲线和给定的control_1control_2end点上给定t处的导数。


Vector3 bezier_interpolate(control_1: Vector3, control_2: Vector3, end: Vector3, t: float) const 🔗

返回此向量定义的贝塞尔曲线上给定t处的点以及给定的control_1control_2end点。


Vector3 bounce(n: Vector3) const 🔗

从给定法线n定义的平面返回向量“反弹”。

注意:bounce()执行大多数引擎和框架调用反映()的操作。


Vector3 ceil() const 🔗

返回一个新向量,所有分量都四舍五入(朝向正无穷大)。


Vector3 clamp(min: Vector3, max: Vector3) const 🔗

通过在每个组件上运行@GlobalScope.clamp(),返回一个新向量,其中所有组件都夹在minmax的组件之间。


Vector3 clampf(min: float, max: float) const 🔗

通过在每个组件上运行@GlobalScope.clamp(),返回一个新向量,其中所有组件都夹在minmax之间。


Vector3 cross(with: Vector3) const 🔗

返回此向量和with的向量积。

这将返回一个垂直于this和with的向量,这将是由两个向量定义的平面的法向量。由于有两个这样的向量,方向相反,此方法返回由右手坐标系定义的向量。如果两个向量平行,则返回一个空向量,这对于测试两个向量是否平行很有用。


Vector3 cubic_interpolate(b: Vector3, pre_a: Vector3, post_b: Vector3, weight: float) const 🔗

使用pre_apost_b作为句柄,在此向量和b之间执行三次插值,并返回位置weight处的结果。weight在0.0到1.0的范围内,表示插值量。


Vector3 cubic_interpolate_in_time(b: Vector3, pre_a: Vector3, post_b: Vector3, weight: float, b_t: float, pre_a_t: float, post_b_t: float) const 🔗

使用pre_apost_b作为句柄,在此向量和b之间执行三次插值,并返回位置weight处的结果。weight在0.0到1.0的范围内,表示插值量。

它可以通过时间值执行比cubic_interpolate()更平滑的插值。


Vector3 direction_to(to: Vector3) const 🔗

返回从该向量指向to的规范化向量。这等效于使用(b-a)。规范化()


float distance_squared_to(to: Vector3) const 🔗

返回此向量与to之间的平方距离。

此方法比distance_to()运行得更快,因此如果您需要比较向量或需要某些公式的平方距离,则更喜欢它。


float distance_to(to: Vector3) const 🔗

返回此向量与to之间的距离。


float dot(with: Vector3) const 🔗

返回此向量与with的点积。这可用于比较两个向量之间的角度。例如,这可用于确定敌人是否正对着用户。

对于直角(90度),点积将为0,对于窄于90度的角度大于0,对于宽于90度的角度小于0。

当使用单位(归一化)向量时,当向量面向相反方向时,结果将始终介于-1.0(180度角)之间,当向量对齐时,结果将始终介于1.0(0度角)之间。

注:a.dot(b)等同于b.dot(a)


Vector3 floor() const 🔗

返回一个新向量,所有分量都向下舍入(朝向负无穷大)。


Vector3 inverse() const 🔗

返回向量的逆。这与Vector3(1.0/v. x,1.0/v.y,1.0/v.z)相同。


bool is_equal_approx(to: Vector3) const 🔗

如果此向量和to近似相等,则返回true,方法是在每个组件上运行@GlobalScope.is_equal_approx()


bool is_finite() const 🔗

如果此向量是有限的,则返回true,方法是在每个组件上调用@GlobalScope.is_finite()


bool is_normalized() const 🔗

如果向量被归一化,即其长度约等于1,则返回true


bool is_zero_approx() const 🔗

如果此向量的值近似为零,则通过在每个组件上运行@GlobalScope.is_zero_approx()返回true

这种方法比使用一个值作为零向量的is_equal_approx()更快。


float length() const 🔗

返回此向量的长度(大小)。


float length_squared() const 🔗

返回此向量的平方长度(平方幅度)。

此方法比length()运行得更快,因此如果您需要比较向量或需要某些公式的平方距离,则更喜欢它。


Vector3 lerp(to: Vector3, weight: float) const 🔗

返回此向量与to之间按数量weight进行线性插值的结果。weight0.01.0的范围内,表示插值量。


Vector3 limit_length(length: float = 1.0) const 🔗

通过将其长度限制为length来返回具有最大长度的向量。如果向量是非有限的,则结果未定义。


Vector3 max(with: Vector3) const 🔗

返回this和with的组件最大值,相当于Vector3(maxf(x, with.x),maxf(y,with.y),maxf(z,with.z))


int max_axis_index() const 🔗

返回向量最高值的轴。请参见AXIS_*常量。如果所有分量相等,则此方法返回AXIS_X


Vector3 maxf(with: float) const 🔗

返回this和with的组件最大值,相当于Vector3(maxf(x, with),maxf(y,with),maxf(z,with))


Vector3 min(with: Vector3) const 🔗

返回this和with的组件最小值,相当于Vector3(minf(x, with.x),minf(y,with.y),minf(z,with.z))


int min_axis_index() const 🔗

返回向量最低值的轴。请参见AXIS_*常量。如果所有分量相等,则此方法返回AXIS_Z


Vector3 minf(with: float) const 🔗

返回this和with的组件最小值,相当于Vector3(minf(x, with),minf(y,with),minf(z,with))


Vector3 move_toward(to: Vector3, delta: float) const 🔗

返回由固定delta量移向to的新向量。不会超过最终值。


Vector3 normalized() const 🔗

返回将向量缩放为单位长度的结果。等效于v/v. long()。如果v.long()==0,则返回(0,0,0)。另请参见is_normalized()

注意:如果输入向量长度接近零,此函数可能会返回不正确的值。


Vector3 octahedron_decode(uv: Vector2) static 🔗

从使用octahedron_encode()创建的octahedral-compressed表单返回Vector3(存储为Vector2)。


Vector2 octahedron_encode() const 🔗

将此Vector3的八面体编码(oct32)形式作为Vector2返回。由于Vector2Vector3占用的内存少1/3,因此这种压缩形式可用于传递更多的normalized()Vector3,而不会增加存储或内存需求。另请参见octahedron_decode()

注意:octahedron_encode()只能用于normalized()向量。octahedron_encode()检查此Vector3是否归一化,如果Vector3未归一化,将返回一个未解压缩为原始值的值。

注意:八面体压缩是有损,尽管视觉差异在现实世界场景中很少察觉到。


Basis outer(with: Vector3) const 🔗

返回带with的外积。


Vector3 posmod(mod: float) const 🔗

返回由该向量的组件的@GlobalScope.fposmod()mod组成的向量。


Vector3 posmodv(modv: Vector3) const 🔗

返回由该向量的组件的@GlobalScope.fposmod()modv的组件组成的向量。


Vector3 project(b: Vector3) const 🔗

返回将此向量投影到给定向量b上产生的新向量。生成的新向量与b平行。另请参阅slide()

注意:如果向量b是零向量,则生成的新向量的分量将是@S3Script.NAN


Vector3 reflect(n: Vector3) const 🔗

返回通过给定法向量n定义的平面反射向量的结果。

注意:reflect()不同于其他引擎和框架所说的反映()。在其他引擎中,反映()返回给定平面反射的向量的结果。因此反射穿过给定的法线。而在i3D中,反射穿过平面,可以被认为是反弹法线。另请参阅bounce(),它执行大多数引擎所说的反映()


Vector3 rotated(axis: Vector3, angle: float) const 🔗

返回此向量绕给定轴旋转angle(以弧度为单位)的结果。轴必须是归一化向量。另请参见@GlobalScope.deg_to_rad()


Vector3 round() const 🔗

返回一个新向量,其中所有分量四舍五入到最接近的整数,其中一半情况从零四舍五入。


Vector3 sign() const 🔗

返回一个新向量,如果每个组件为正,则将每个组件设置为1.0,如果为负,则将-1.0,如果为零,则将0.0。结果与在每个组件上调用@GlobalScope.sign()相同。


float signed_angle_to(to: Vector3, axis: Vector3) const 🔗

返回给定向量的带符号角度,以弧度为单位。从axis指定的一侧观察时,角度的符号在逆时针方向为正,在顺时针方向为负。


Vector3 slerp(to: Vector3, weight: float) const 🔗

返回此向量与to之间的球面线性插值结果,按数量weightweight在0.0到1.0的范围内,表示插值量。

如果输入向量具有不同的长度,此方法还处理长度插值。对于一个或两个输入向量长度为零的特殊情况,此方法的行为类似于lerp()


Vector3 slide(n: Vector3) const 🔗

返回一个新向量,该向量沿带法线n的平面滑动产生。生成的新向量垂直于n,等价于该向量减去它在n上的投影。另请参见project()

注意:向量n必须归一化。另见normalized()


Vector3 snapped(step: Vector3) const 🔗

返回一个新向量,其中每个组件都捕捉到step中相应组件的最接近倍数。这也可用于将组件四舍五入到任意数量的小数。


Vector3 snappedf(step: float) const 🔗

返回一个新向量,其中每个组件都捕捉到step的最接近倍数。这也可用于将组件四舍五入到任意数量的小数。


运算符说明

bool operator !=(right: Vector3) 🔗

如果向量不相等,则返回true

注:由于浮点精度误差,考虑改用is_equal_approx(),这样更可靠。

注意:具有@S3Script.NAN元素的向量的行为与其他向量不同。因此,如果包含NaN,则此运算符的结果可能不准确。


Vector3 operator *(right: Basis) 🔗

假设基是正交的(即旋转/反射很好,缩放/歪斜不好),将Vector3与给定的Basis矩阵进行逆变换(相乘)。

vector*basis等价于basis.transposed()*vector。请参阅Basis.transposed()

对于通过非正交基的逆变换(例如使用缩放)basis.inverse()*vector代替。请参阅Basis.inverse()


Vector3 operator *(right: Quaternion) 🔗

Vector3与给定的Quaternion进行逆变换(相乘)。

vector*Quaternion等价于Quaternion.inverse()*vector。参见Quaternion.inverse()


Vector3 operator *(right: Transform3D) 🔗

假设变换基是正交的(即旋转/反射很好,缩放/倾斜不好),将Vector3与给定的Transform3D变换矩阵进行逆变换(相乘)。

vector*transform等价于transform.inverse()*vector。参见Transform3D.inverse()

用于通过仿射变换的逆变换(例如缩放)transform.affine_inverse()*vector代替。参见Transform3D.affine_inverse()


Vector3 operator *(right: Vector3) 🔗

将此 Vector3 的每个分量与给定的 Vector3 的对应分量相乘。

print(Vector3(10, 20, 30) * Vector3(3, 4, 5)) # Prints (30.0, 80.0, 150.0)

Vector3 operator *(right: float) 🔗

Vector3的每个分量乘以给定的float


Vector3 operator *(right: int) 🔗

Vector3的每个组件乘以给定的int


Vector3 operator +(right: Vector3) 🔗

将此 Vector3 的每个分量与给定的 Vector3 的对应分量相加。

print(Vector3(10, 20, 30) + Vector3(3, 4, 5)) # Prints (13.0, 24.0, 35.0)

Vector3 operator -(right: Vector3) 🔗

Vector3 的每个分量减去给定 Vector3 的分量“

print(Vector3(10, 20, 30) - Vector3(3, 4, 5)) # Prints (7.0, 16.0, 25.0)

Vector3 operator /(right: Vector3) 🔗

Vector3 的每个分量除以给定 Vector3 的分量。

print(Vector3(10, 20, 30) / Vector3(2, 5, 3)) # Prints (5.0, 4.0, 10.0)

Vector3 operator /(right: float) 🔗

Vector3的每个组件除以给定的float


Vector3 operator /(right: int) 🔗

Vector3的每个组件除以给定的int


bool operator <(right: Vector3) 🔗

通过首先检查左向量的X值是否小于right向量的X值来比较两个Vector3向量。如果X值完全相等,则它使用两个向量的Y值重复此检查,然后使用Z值。此运算符对于排序向量很有用。

注意:具有@S3Script.NAN元素的向量的行为与其他向量不同。因此,如果包含NaN,则此运算符的结果可能不准确。


bool operator <=(right: Vector3) 🔗

通过首先检查左向量的X值是否小于或等于right向量的X值来比较两个Vector3向量。如果X值完全相等,则它使用两个向量的Y值重复此检查,然后使用Z值。此运算符对于排序向量很有用。

注意:具有@S3Script.NAN元素的向量的行为与其他向量不同。因此,如果包含NaN,则此运算符的结果可能不准确。


bool operator ==(right: Vector3) 🔗

如果向量完全相等,则返回true

注意:由于浮点精度误差,考虑改用is_equal_approx(),这样更可靠。

注意:具有@S3Script.NAN元素的向量的行为与其他向量不同。因此,如果包含NaN,则此运算符的结果可能不准确。


bool operator >(right: Vector3) 🔗

通过首先检查左向量的X值是否大于right向量的X值来比较两个Vector3向量。如果X值完全相等,则它使用两个向量的Y值重复此检查,然后使用Z值。此运算符对于排序向量很有用。

注意:具有@S3Script.NAN元素的向量的行为与其他向量不同。因此,如果包含NaN,则此运算符的结果可能不准确。


bool operator >=(right: Vector3) 🔗

通过首先检查左向量的X值是否大于或等于right向量的X值来比较两个Vector3向量。如果X值完全相等,则它使用两个向量的Y值重复此检查,然后使用Z值。此运算符对于排序向量很有用。

注意:具有@S3Script.NAN元素的向量的行为与其他向量不同。因此,如果包含NaN,则此运算符的结果可能不准确。


float operator [](index: int) 🔗

使用它们的index访问向量组件。v[0]等价于v. xv[1]等价于v.y,并且v[2]等价于v.z


Vector3 operator unary+() 🔗

返回与+不存在相同的值。一元+什么也不做,但有时它可以使您的代码更具可读性。


Vector3 operator unary-() 🔗

返回Vector3的负值。这与编写Vector3(-v. x,-v.y,-v.z)相同。此操作在保持相同大小的同时翻转向量的方向。对于浮点数,数字零可以是正的也可以是负的。