Vector3
Трехмерный вектор, использующий координаты с плавающей точкой.
Описание
Структура из 3 элементов, которая может использоваться для представления 3D-координат или любого другого триплета числовых значений.
Она использует координаты с плавающей точкой. По умолчанию эти значения с плавающей точкой используют 32-битную точность, в отличие от float, который всегда 64-битный. Если требуется двойная точность, скомпилируйте движок с опцией precision=double.
См. Vector3i для его целочисленного аналога.
Примечание: В логическом контексте Vector3 будет оцениваться как false, если он равен Vector3(0, 0, 0). В противном случае Vector3 всегда будет оцениваться как true.
Обучающие материалы
Свойства
|
||
|
||
|
Конструкторы
Vector3() |
|
Методы
abs() const |
|
bezier_derivative(control_1: Vector3, control_2: Vector3, end: Vector3, t: float) const |
|
bezier_interpolate(control_1: Vector3, control_2: Vector3, end: Vector3, t: float) const |
|
ceil() const |
|
cubic_interpolate(b: Vector3, pre_a: Vector3, post_b: Vector3, weight: float) const |
|
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 |
|
direction_to(to: Vector3) const |
|
distance_squared_to(to: Vector3) const |
|
distance_to(to: Vector3) const |
|
floor() const |
|
inverse() const |
|
is_equal_approx(to: Vector3) const |
|
is_finite() const |
|
is_normalized() const |
|
is_zero_approx() const |
|
length() const |
|
length_squared() const |
|
limit_length(length: float = 1.0) const |
|
max_axis_index() const |
|
min_axis_index() const |
|
move_toward(to: Vector3, delta: float) const |
|
normalized() const |
|
octahedron_decode(uv: Vector2) static |
|
octahedron_encode() const |
|
round() const |
|
sign() const |
|
signed_angle_to(to: Vector3, axis: Vector3) const |
|
Операторы
operator !=(right: Vector3) |
|
operator *(right: Basis) |
|
operator *(right: Quaternion) |
|
operator *(right: Transform3D) |
|
operator *(right: Vector3) |
|
operator *(right: float) |
|
operator *(right: int) |
|
operator +(right: Vector3) |
|
operator -(right: Vector3) |
|
operator /(right: Vector3) |
|
operator /(right: float) |
|
operator /(right: int) |
|
operator <(right: Vector3) |
|
operator <=(right: Vector3) |
|
operator ==(right: Vector3) |
|
operator >(right: Vector3) |
|
operator >=(right: Vector3) |
|
operator [](index: int) |
|
Перечисления
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-ресурсов.
Описания свойств
X компонент вектора. Может быть доступен через индекс [0].
Y компонент вектора. Может быть доступен через индекс [1].
Z компонент вектора. Также может быть доступен по индексу [2].
Описания конструктора
Создает инициализированный по умолчанию Vector3, где все компоненты установлены в 0.
Vector3 Vector3(from: Vector3)
Создает Vector3 как копию заданного Vector3.
Vector3 Vector3(from: Vector3i)
Создает новый Vector3 из Vector3i.
Vector3 Vector3(x: float, y: float, z: float)
Возвращает Vector3 с заданными компонентами.
Описания метода
Возвращает новый вектор в котором все компоненты будут абсолютными значениями (т.е положительными).
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 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(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() для каждого компонента.
Возвращает true, если этот вектор конечен, вызывая @GlobalScope.is_finite() для каждого компонента.
Возвращает true, если вектор нормализован, т.е. его длина приблизительно равна 1.
Возвращает true, если значения этого вектора приблизительно равны нулю, выполняя @GlobalScope.is_zero_approx() для каждого компонента.
Этот метод быстрее, чем использование is_equal_approx() с одним значением в качестве нулевого вектора.
Возвращает длину (величину) данного вектора.
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)).
Возвращает ось наибольшего значения вектора. См. константы 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)).
Возвращает ось наименьшего значения вектора. См. константы 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. Не выйдет за пределы конечного значения.
Возвращает результат масштабирования вектора до единичной длины. Эквивалентно 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().
Возвращает новый вектор, все компоненты которого округлены до ближайшего целого числа, а половинные значения округлены от нуля.
Возвращает новый вектор, в котором каждый компонент установлен на 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. Это то же самое, что и запись Vector3(-v.x, -v.y, -v.z). Эта операция меняет направление вектора, сохраняя ту же величину. С плавающей точкой число ноль может быть как положительным, так и отрицательным.