Vector2

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

Описание

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

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

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

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

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

Свойства

float

x

0.0

float

y

0.0

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

Vector2

Vector2()

Vector2

Vector2(from: Vector2)

Vector2

Vector2(from: Vector2i)

Vector2

Vector2(x: float, y: float)

Методы

Vector2

abs() const

float

angle() const

float

angle_to(to: Vector2) const

float

angle_to_point(to: Vector2) const

float

aspect() const

Vector2

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

Vector2

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

Vector2

bounce(n: Vector2) const

Vector2

ceil() const

Vector2

clamp(min: Vector2, max: Vector2) const

Vector2

clampf(min: float, max: float) const

float

cross(with: Vector2) const

Vector2

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

Vector2

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

Vector2

direction_to(to: Vector2) const

float

distance_squared_to(to: Vector2) const

float

distance_to(to: Vector2) const

float

dot(with: Vector2) const

Vector2

floor() const

Vector2

from_angle(angle: float) static

bool

is_equal_approx(to: Vector2) const

bool

is_finite() const

bool

is_normalized() const

bool

is_zero_approx() const

float

length() const

float

length_squared() const

Vector2

lerp(to: Vector2, weight: float) const

Vector2

limit_length(length: float = 1.0) const

Vector2

max(with: Vector2) const

int

max_axis_index() const

Vector2

maxf(with: float) const

Vector2

min(with: Vector2) const

int

min_axis_index() const

Vector2

minf(with: float) const

Vector2

move_toward(to: Vector2, delta: float) const

Vector2

normalized() const

Vector2

orthogonal() const

Vector2

posmod(mod: float) const

Vector2

posmodv(modv: Vector2) const

Vector2

project(b: Vector2) const

Vector2

reflect(line: Vector2) const

Vector2

rotated(angle: float) const

Vector2

round() const

Vector2

sign() const

Vector2

slerp(to: Vector2, weight: float) const

Vector2

slide(n: Vector2) const

Vector2

snapped(step: Vector2) const

Vector2

snappedf(step: float) const

Операторы

bool

operator !=(right: Vector2)

Vector2

operator *(right: Transform2D)

Vector2

operator *(right: Vector2)

Vector2

operator *(right: float)

Vector2

operator *(right: int)

Vector2

operator +(right: Vector2)

Vector2

operator -(right: Vector2)

Vector2

operator /(right: Vector2)

Vector2

operator /(right: float)

Vector2

operator /(right: int)

bool

operator <(right: Vector2)

bool

operator <=(right: Vector2)

bool

operator ==(right: Vector2)

bool

operator >(right: Vector2)

bool

operator >=(right: Vector2)

float

operator [](index: int)

Vector2

operator unary+()

Vector2

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().


Константы

ZERO = Vector2(0, 0) 🔗

Нулевой вектор — вектор у которого все координаты равны 0.

ONE = Vector2(1, 1) 🔗

Вектор-единица — вектор у которого все координаты равны 1.

INF = Vector2(inf, inf) 🔗

Вектор бесконечности, вектор, все компоненты которого установлены в @GDScript.INF.

LEFT = Vector2(-1, 0) 🔗

Левый единичный вектор. Представляет направление влево.

RIGHT = Vector2(1, 0) 🔗

Правый единичный вектор. Представляет направление вправо.

UP = Vector2(0, -1) 🔗

Up единичный вектор вверх. Y направлен вниз в 2D, поэтому этот вектор указывает на -Y.

DOWN = Vector2(0, 1) 🔗

Down - единичный вектор вниз. Y направлен вниз в 2D, поэтому этот вектор указывает на +Y.


Описания свойств

float x = 0.0 🔗

X компонент вектора. Может быть доступен через индекс [0].


float y = 0.0 🔗

Y компонент вектора. Может быть доступен через индекс [1].


Описания конструктора

Vector2 Vector2() 🔗

Создает инициализированный по умолчанию Vector2, где все компоненты установлены в 0.


Vector2 Vector2(from: Vector2)

Создает Vector2 как копию заданного Vector2.


Vector2 Vector2(from: Vector2i)

Создает новый Vector2 из Vector2i.


Vector2 Vector2(x: float, y: float)

Создает новый Vector2 из заданных x и y.


Описания метода

Vector2 abs() const 🔗

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


float angle() const 🔗

Возвращает угол этого вектора относительно положительной оси X, или вектора (1, 0), в радианах.

Например, Vector2.RIGHT.angle() вернет ноль, Vector2.DOWN.angle() вернет PI / 2 (четверть оборота, или 90 градусов), а Vector2(1, -1).angle() вернет -PI / 4 (минус восьмая оборота, или -45 градусов).

Это эквивалентно вызову @GlobalScope.atan2() с y и x.

Иллюстрация возвращаемого угла.


float angle_to(to: Vector2) const 🔗

Возвращает знаковый угол к заданному вектору в радианах. Результат находится в диапазоне от -PI до PI (включительно).

Иллюстрация возвращаемого угла.


float angle_to_point(to: Vector2) const 🔗

Возвращает знаковый угол между осью X и линией, проведенной от этого вектора к точке to, в радианах. Результат варьируется от -PI до PI (включительно).

a.angle_to_point(b) эквивалентно (b - a).angle(). См. также angle().

Иллюстрация возвращаемого угла.


float aspect() const 🔗

Возвращает соотношение сторон этого вектора, равное x делению на y.


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

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


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

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


Vector2 bounce(n: Vector2) const 🔗

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

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


Vector2 ceil() const 🔗

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


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

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


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

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


float cross(with: Vector2) const 🔗

Возвращает 2D-аналог векторного произведения для этого вектора и with.

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

Примечание: Взаимное произведение не определено в 2D математически. Этот метод встраивает 2D-векторы в плоскость XY 3D-пространства и использует компонент Z их векторного произведения в качестве аналога.


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

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


Vector2 cubic_interpolate_in_time(b: Vector2, pre_a: Vector2, post_b: Vector2, 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() по значениям времени.


Vector2 direction_to(to: Vector2) const 🔗

Возвращает нормализованный вектор, указывающий из этого вектора на to.

a.direction_to(b) эквивалентно (b - a).normalized(). См. также normalized().


float distance_squared_to(to: Vector2) const 🔗

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

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


float distance_to(to: Vector2) const 🔗

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


float dot(with: Vector2) const 🔗

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

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

При использовании единичных (нормализованных) векторов результат всегда будет между -1.0 (угол 180 градусов), когда векторы смотрят в противоположных направлениях, и 1.0 (угол 0 градусов), когда векторы выровнены.

Примечание: a.dot(b) эквивалентно b.dot(a).


Vector2 floor() const 🔗

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


Vector2 from_angle(angle: float) static 🔗

Создает Vector2, повернутый на заданный angle в радианах. Это эквивалентно выполнению Vector2(cos(angle), sin(angle)) или Vector2.RIGHT.rotated(angle).

print(Vector2.from_angle(0)) # Выводит (1.0, 0.0)
print(Vector2(1, 0).angle()) # Выводит 0.0, что является углом, использованным выше.
print(Vector2.from_angle(PI / 2)) # Выводит (0.0, 1.0)

Примечание: Длина возвращаемого Vector2 составляет приблизительно 1.0, но не гарантируется, что она будет равна точно 1.0 из-за проблем с точностью чисел с плавающей точкой. Вызовите normalized() для возвращенного Vector2, если вам требуется единичный вектор.


bool is_equal_approx(to: Vector2) 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(), поэтому он предпочтительнее если вам нужно сравнить векторы или нужно расстояние в квадрате для какой-либо формулы.


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

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


Vector2 limit_length(length: float = 1.0) const 🔗

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


Vector2 max(with: Vector2) const 🔗

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


int max_axis_index() const 🔗

Возвращает ось наибольшего значения вектора. См. константы AXIS_*. Если все компоненты равны, этот метод возвращает AXIS_X.


Vector2 maxf(with: float) const 🔗

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


Vector2 min(with: Vector2) const 🔗

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


int min_axis_index() const 🔗

Возвращает ось наименьшего значения вектора. См. константы AXIS_*. Если все компоненты равны, этот метод возвращает AXIS_Y.


Vector2 minf(with: float) const 🔗

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


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

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


Vector2 normalized() const 🔗

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

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


Vector2 orthogonal() const 🔗

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


Vector2 posmod(mod: float) const 🔗

Возвращает вектор, состоящий из @GlobalScope.fposmod() компонентов этого вектора и mod.


Vector2 posmodv(modv: Vector2) const 🔗

Возвращает вектор, состоящий из @GlobalScope.fposmod() компонентов этого вектора и компонентов modv.


Vector2 project(b: Vector2) const 🔗

Возвращает новый вектор, полученный в результате проецирования этого вектора на заданный вектор b. Результирующий новый вектор параллелен b. См. также slide().

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


Vector2 reflect(line: Vector2) const 🔗

Возвращает результат отражения вектора от линии, заданной заданным вектором направления line.

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


Vector2 rotated(angle: float) const 🔗

Возвращает результат поворота этого вектора на angle (в радианах). См. также @GlobalScope.deg_to_rad().


Vector2 round() const 🔗

Возвращает новый вектор, все компоненты которого округлены до ближайшего целого числа, а половинные значения округлены от нуля.


Vector2 sign() const 🔗

Возвращает новый вектор, в котором каждый компонент установлен на 1.0, если он положительный, -1.0, если он отрицательный, и 0.0, если он равен нулю. Результат идентичен вызову @GlobalScope.sign() для каждого компонента.


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

Возвращает результат сферической линейной интерполяции между этим вектором и to на величину weight. weight находится в диапазоне от 0,0 до 1,0, представляя величину интерполяции.

Этот метод также обрабатывает интерполяцию длин, если входные векторы имеют разную длину. Для особого случая, когда один или оба входных вектора имеют нулевую длину, этот метод ведет себя как lerp().


Vector2 slide(n: Vector2) const 🔗

Возвращает новый вектор, полученный в результате скольжения этого вектора вдоль линии с нормалью n. Результирующий новый вектор перпендикулярен n и эквивалентен этому вектору за вычетом его проекции на n. См. также project().

Примечание: Вектор n должен быть нормализован. См. также normalized().


Vector2 snapped(step: Vector2) const 🔗

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


Vector2 snappedf(step: float) const 🔗

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


Описания оператора

bool operator !=(right: Vector2) 🔗

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

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

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


Vector2 operator *(right: Transform2D) 🔗

Обратно преобразует (умножает) Vector2 на заданную матрицу преобразования Transform2D, при условии, что базис преобразования ортонормален (т. е. поворот/отражение хороши, масштабирование/перекос — нет).

vector * transform эквивалентно transform.inverse() * vector. См. Transform2D.inverse().

Для преобразования с помощью обратного аффинного преобразования (например, с масштабированием) вместо него можно использовать transform.affine_inverse() * vector. См. Transform2D.affine_inverse().


Vector2 operator *(right: Vector2) 🔗

Умножает каждый компонент Vector2 на компоненты заданного Vector2.

print(Vector2(10, 20) * Vector2(3, 4)) # Выводит (30.0, 80.0)

Vector2 operator *(right: float) 🔗

Умножает каждый компонент Vector2 на заданное float.


Vector2 operator *(right: int) 🔗

Умножает каждый компонент Vector2 на заданное int.


Vector2 operator +(right: Vector2) 🔗

Добавляет каждый компонент Vector2 к компонентам указанного Vector2.

print(Vector2(10, 20) + Vector2(3, 4)) # Prints (13.0, 24.0)

Vector2 operator -(right: Vector2) 🔗

Вычитает каждый компонент Vector2 из компонентов заданного Vector2.

print(Vector2(10, 20) - Vector2(3, 4)) # Print (7.0, 16.0)

Vector2 operator /(right: Vector2) 🔗

Делит каждый компонент Vector2 на компоненты заданного Vector2.

print(Vector2(10, 20) / Vector2(2, 5)) # Prints (5.0, 4.0)

Vector2 operator /(right: float) 🔗

Делит каждый компонент Vector2 на заданное float.


Vector2 operator /(right: int) 🔗

Делит каждый компонент Vector2 на заданное int.


bool operator <(right: Vector2) 🔗

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

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


bool operator <=(right: Vector2) 🔗

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

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


bool operator ==(right: Vector2) 🔗

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

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

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


bool operator >(right: Vector2) 🔗

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

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


bool operator >=(right: Vector2) 🔗

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

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


float operator [](index: int) 🔗

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


Vector2 operator unary+() 🔗

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


Vector2 operator unary-() 🔗

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