Vector3

Трехмерный вектор, использующий координаты с плавающей точкой.

Описание

Структура из 3 элементов, которая может использоваться для представления 3D-координат или любого другого триплета числовых значений.

Она использует координаты с плавающей точкой. По умолчанию эти значения с плавающей точкой используют 32-битную точность, в отличие от float, который всегда 64-битный. Если требуется двойная точность, скомпилируйте движок с опцией precision=double.

См. Vector3i для его целочисленного аналога.

Примечание: В логическом контексте Vector3 будет оцениваться как false, если он равен Vector3(0, 0, 0). В противном случае Vector3 всегда будет оцениваться как true.

Обучающие материалы

Свойства

float

x

0.0

float

y

0.0

float

z

0.0

Конструкторы

Vector3

Vector3()

Vector3

Vector3(from: Vector3)

Vector3

Vector3(from: Vector3i)

Vector3

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

Методы

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

Операторы

bool

operator !=(right: Vector3)

Vector3

operator *(right: Basis)

Vector3

operator *(right: Quaternion)

Vector3

operator *(right: Transform3D)

Vector3

operator *(right: Vector3)

Vector3

operator *(right: float)

Vector3

operator *(right: int)

Vector3

operator +(right: Vector3)

Vector3

operator -(right: Vector3)

Vector3

operator /(right: Vector3)

Vector3

operator /(right: float)

Vector3

operator /(right: int)

bool

operator <(right: Vector3)

bool

operator <=(right: Vector3)

bool

operator ==(right: Vector3)

bool

operator >(right: Vector3)

bool

operator >=(right: Vector3)

float

operator [](index: int)

Vector3

operator unary+()

Vector3

operator unary-()


Перечисления

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) 🔗

Вектор бесконечности, вектор, все компоненты которого установлены в @GDScript.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-ресурсов, таких как персонажи, которые по соглашению обращены лицом к камере. Используйте MODEL_FRONT и подобные константы при работе в пространстве 3D-ресурсов.

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) 🔗

Единичный вектор, направленный к верхней стороне (up) импортированных 3D-ресурсов.

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

Единичный вектор, направленный к нижней стороне (down) импортированных 3D-ресурсов.

MODEL_FRONT = Vector3(0, 0, 1) 🔗

Единичный вектор, направленный к передней стороне (лицом вперед) импортированных 3D-ресурсов.

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

Единичный вектор, направленный к задней стороне (back) импортированных 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)

Создает новый Vector3 из Vector3i.


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 🔗

Возвращает производную по заданному t на кривой Безье, определенной этим вектором и заданными точками control_1, control_2 и end.


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

Возвращает точку с заданным t на кривой Безье, определенной этим вектором и заданными точками control_1, control_2 и end.


Vector3 bounce(n: Vector3) const 🔗

Возвращает вектор, "отскочивший" от плоскости, определенной заданной нормалью n.

Примечание: bounce() выполняет операцию, которую большинство движков и фреймворков называют reflect().


Vector3 ceil() const 🔗

Возвращает новый вектор, все компоненты которого округлены в большую сторону (в сторону положительной бесконечности).


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

Возвращает новый вектор со всеми компонентами, зажатыми между компонентами min и max, путем запуска @GlobalScope.clamp() для каждого компонента.


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

Возвращает новый вектор со всеми компонентами, зажатыми между min и max, путем запуска @GlobalScope.clamp() для каждого компонента.


Vector3 cross(with: Vector3) const 🔗

Возвращает векторное произведение этого вектора и with.

Это возвращает вектор, перпендикулярный как этому, так и with, который будет нормальным вектором плоскости, определенной двумя векторами. Поскольку есть два таких вектора в противоположных направлениях, этот метод возвращает вектор, определенный правой системой координат. Если два вектора параллельны, это возвращает пустой вектор, что делает его полезным для проверки параллельности двух векторов.


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

Выполняет кубическую интерполяцию между этим вектором и b, используя pre_a и post_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 🔗

Выполняет кубическую интерполяцию между этим вектором и b, используя pre_a и post_b в качестве дескрипторов, и возвращает результат в позиции weight. weight находится в диапазоне от 0,0 до 1,0, представляя величину интерполяции.

Он может выполнять более плавную интерполяцию, чем cubic_interpolate() по значениям времени.


Vector3 direction_to(to: Vector3) const 🔗

Возвращает нормализованный вектор, указывающий из этого вектора на to. Это эквивалентно использованию (b - a).normalized().


float distance_squared_to(to: Vector3) const 🔗

Возвращает квадрат расстояния между этим вектором и to.

Этот метод работает быстрее, чем distance_to(), поэтому предпочитайте его, если вам нужно сравнить векторы или вам нужен квадрат расстояния для какой-то формулы.


float distance_to(to: Vector3) const 🔗

Возвращает расстояние между данным вектором и to.


float dot(with: Vector3) const 🔗

Возвращает скалярное произведение этого вектора и with. Это можно использовать для сравнения угла между двумя векторами. Например, это можно использовать для определения того, смотрит ли враг на игрока.

Скалярное произведение будет равно 0 для прямого угла (90 градусов), больше 0 для углов уже 90 градусов и меньше 0 для углов шире 90 градусов.

При использовании единичных (нормализованных) векторов результат всегда будет между -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 🔗

Возвращает true, если этот вектор и to приблизительно равны, путем запуска @GlobalScope.is_equal_approx() для каждого компонента.


bool is_finite() const 🔗

Возвращает true, если этот вектор конечен, вызывая @GlobalScope.is_finite() для каждого компонента.


bool is_normalized() const 🔗

Возвращает true, если вектор нормализован, т.е. его длина приблизительно равна 1.


bool is_zero_approx() const 🔗

Возвращает true, если значения этого вектора приблизительно равны нулю, выполняя @GlobalScope.is_zero_approx() для каждого компонента.

Этот метод быстрее, чем использование is_equal_approx() с одним значением в качестве нулевого вектора.


float length() const 🔗

Возвращает длину (величину) данного вектора.


float length_squared() const 🔗

Возвращает длину данного вектора в квадрате.

Этот метод выполняется быстрее, чем length(), поэтому он предпочтительнее если вам нужно сравнить векторы или нужно расстояние в квадрате для какой-либо формулы.


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

Возвращает результат линейной интерполяции между данным вектором и to на величину weight. weight находится в диапазоне от 0.0 до 1.0, что представляет собой величину интерполяции.


Vector3 limit_length(length: float = 1.0) const 🔗

Возвращает вектор с максимальной длиной, ограничивая его длину до length. Если вектор не конечен, результат не определен.


Vector3 max(with: Vector3) const 🔗

Возвращает покомпонентный максимум этого и 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 🔗

Возвращает покомпонентный максимум этого и with, что эквивалентно Vector3(maxf(x, with), maxf(y, with), maxf(z, with)).


Vector3 min(with: Vector3) const 🔗

Возвращает покомпонентный минимум этого и 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 🔗

Возвращает покомпонентный минимум этого и with, эквивалентно Vector3(minf(x, with), minf(y, with), minf(z, with)).


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

Возвращает новый вектор, смещенный к to на фиксированную величину delta. Не выйдет за пределы конечного значения.


Vector3 normalized() const 🔗

Возвращает результат масштабирования вектора до единичной длины. Эквивалентно v / v.length(). Возвращает (0, 0, 0), если v.length() == 0. См. также is_normalized().

Примечание: Эта функция может возвращать неверные значения, если длина входного вектора близка к нулю.


Vector3 octahedron_decode(uv: Vector2) static 🔗

Возвращает Vector3 из октаэдрически сжатой формы, созданной с помощью octahedron_encode() (сохраненной как Vector2).


Vector2 octahedron_encode() const 🔗

Возвращает октаэдрически закодированную (oct32) форму этого Vector3 как Vector2. Поскольку Vector2 занимает на 1/3 меньше памяти по сравнению с Vector3, эта форма сжатия может использоваться для передачи большего количества 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 является нулевым вектором, компоненты результирующего нового вектора будут @GDScript.NAN.


Vector3 reflect(n: Vector3) const 🔗

Возвращает результат отражения вектора через плоскость, определенную заданным вектором нормали n.

Примечание: reflect() отличается от того, что другие движки и фреймворки называют reflect(). В других движках reflect() возвращает результат вектора, отраженного заданной плоскостью. Таким образом, отражение проходит через заданную нормаль. В то время как в Godot отражение проходит через плоскость и может рассматриваться как отскок от нормали. См. также bounce(), который делает то, что большинство движков называют reflect().


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 на величину weight. weight находится в диапазоне от 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() вместо этого, что более надежно.

Примечание: Векторы с элементами @GDScript.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)) # Выводит (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) 🔗

Сравнивает два вектора Vector3, сначала проверяя, меньше ли значение X левого вектора, чем значение X вектора right. Если значения X в точности равны, то он повторяет эту проверку со значениями Y двух векторов, а затем со значениями Z. Этот оператор полезен для сортировки векторов.

Примечание: Векторы с элементами @GDScript.NAN ведут себя не так, как другие векторы. Поэтому результаты этого оператора могут быть неточными, если включены NaN-ы.


bool operator <=(right: Vector3) 🔗

Сравнивает два вектора Vector3, сначала проверяя, меньше ли значение X левого вектора или равно ли ему значение X вектора right. Если значения X в точности равны, то он повторяет эту проверку со значениями Y двух векторов, а затем со значениями Z. Этот оператор полезен для сортировки векторов.

Примечание: Векторы с элементами @GDScript.NAN ведут себя не так, как другие векторы. Поэтому результаты этого оператора могут быть неточными, если включены NaN-ы.


bool operator ==(right: Vector3) 🔗

Возвращает true, если векторы точно равны.

Примечание: Из-за ошибок точности с плавающей точкой рассмотрите возможность использования is_equal_approx() вместо этого, что более надежно.

Примечание: Векторы с элементами @GDScript.NAN ведут себя не так, как другие векторы. Поэтому результаты этого оператора могут быть неточными, если включены NaN.


bool operator >(right: Vector3) 🔗

Сравнивает два вектора Vector3, сначала проверяя, больше ли значение X левого вектора, чем значение X вектора right. Если значения X в точности равны, то он повторяет эту проверку со значениями Y двух векторов, а затем со значениями Z. Этот оператор полезен для сортировки векторов.

Примечание: Векторы с элементами @GDScript.NAN ведут себя не так, как другие векторы. Поэтому результаты этого оператора могут быть неточными, если включены NaN-ы.


bool operator >=(right: Vector3) 🔗

Сравнивает два вектора Vector3, сначала проверяя, больше ли значение X левого вектора или равно ли ему значение X вектора right. Если значения X в точности равны, то он повторяет эту проверку со значениями Y двух векторов, а затем со значениями Z. Этот оператор полезен для сортировки векторов.

Примечание: Векторы с элементами @GDScript.NAN ведут себя не так, как другие векторы. Поэтому результаты этого оператора могут быть неточными, если включены NaN-ы.


float operator [](index: int) 🔗

Доступ к компонентам вектора осуществляется с помощью их index. v[0] эквивалентно v.x, v[1] эквивалентно v.y, а v[2] эквивалентно v.z.


Vector3 operator unary+() 🔗

Возвращает то же значение, как если бы + не было. Унарный + ничего не делает, но иногда он может сделать ваш код более читаемым.


Vector3 operator unary-() 🔗

Возвращает отрицательное значение Vector3. Это то же самое, что и запись Vector3(-v.x, -v.y, -v.z). Эта операция меняет направление вектора, сохраняя ту же величину. С плавающей точкой число ноль может быть как положительным, так и отрицательным.