Vector2

Вектор 2D з використанням плавно-точкових координат.

Опис

Дворівнева структура, яка може бути використана для представлення 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) 🔗

Вектор блоку. Я вниз в 2D, тому це векторні точки -Y.

DOWN = Vector2(0, 1) 🔗

Вектор внизу. Я вниз в 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)

Constructs a new 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 градусів).

Ілюстрація повернутого кута

Equivalent до результату @GlobalScope.atan2(), коли називається вектором y і x в якості параметрів: atan2(y, x).


float angle_to(to: Vector2) const 🔗

Повертає кут зі знаком до заданого вектора в радіанах.

Ілюстрація повернутого кута.


float angle_to_point(to: Vector2) const 🔗

Повертає кут між рядком, що з'єднує дві точки і вісь X, в радіанах.

a.angle_to_point(b) еквівалента (b - a).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 перпендикулярно лінії.

Note: 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 аналог поперечного виробу для цього вектора і пара з.

Це підписана площа паралелограма, утворена двома векторами. Якщо другий вектор за годинниковою стрілкою з першого вектора, то перехресний продукт - позитивна площа. Якщо проти годинникової стрілки, перехресний продукт є негативною зоною. Якщо два вектори паралельно це повертає нуль, що робить його корисним для тестування, якщо два вектори паралельно.

Примітка: Перетинний продукт не визначений математично. Цей метод складається з 2D векторів у площині XY 3D і використовує їх поперечний компонент Z 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. Це еквівалентно виразу (b - a).normalized().


float distance_squared_to(to: Vector2) const 🔗

Повертає квадрат відстані між цим вектором і to.

Цей метод працює швидше, ніж distance_to(), тому надавайте йому перевагу, якщо потрібно порівнювати вектори або використовувати квадрат відстані у формулі.


float distance_to(to: Vector2) const 🔗

Повертає відстань між цим вектором і до.


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.inverse() * вектор. Transform2D.inverse().

Для перетворення інверсом афінової трансформації (наприклад, з масштабуванням) transform.affine_inverse() * вектор можна використовувати замість. 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)) # Виводить (13.0, 24.0)

Vector2 operator -(right: Vector2) 🔗

Віднімає кожну компоненту Vector2 від компонентів заданого Vector2.

print(Vector2(10, 20) - Vector2(3, 4)) # Виводить (7.0, 16.0)

Vector2 operator /(right: Vector2) 🔗

Ділить кожну компоненту Vector2 на компоненти заданого Vector2.

print(Vector2(10, 20) / Vector2(2, 5)) # Виводить (5.0, 4.0)

Vector2 operator /(right: float) 🔗

Дивиди кожний компонент Vector2 відданий float.


Vector2 operator /(right: int) 🔗

Дивиди кожного компонента Vector2 за умови int.


bool operator <(right: Vector2) 🔗

Порівнює два вектори Vector2, спочатку перевіряючи чи значення X у лівого вектора менше за значення right вектора, і, за рівності X, повторює перевірку для значень Y. Корисно для сортування.

Примітка: Поведінка векторів з @GDScript.NAN відрізняється від інших. Через це результати цього методу можуть бути неточними за наявності NaN-ів.


bool operator <=(right: Vector2) 🔗

Порівнює два вектори Vector2, спочатку перевіряючи чи значення X у лівого вектора менше чи рівне до right вектора, і, за рівності X, повторює перевірку для значень Y. Корисно для сортування.

Примітка: Поведінка векторів з @GDScript.NAN відрізняється від інших. Через це результати цього методу можуть бути неточними за наявності NaN-ів.


bool operator ==(right: Vector2) 🔗

Повертає true, якщо вектори абсолютно рівні.

Примітка: Через помилки точності з плаваючою комою, краще використати is_equal_approx(), який є більш надійним.

Примітка: Вектори з елементами @GDScript.NAN не поводяться так само, як інші вектори. Тому результати цього оператора можуть бути неточними, якщо включено NaN.


bool operator >(right: Vector2) 🔗

Порівнює два вектори Vector2, спочатку перевіряючи чи значення X у лівого вектора більше за значення right вектора, і, за рівності X, повторює перевірку для значень Y. Корисно для сортування.

Примітка: Поведінка векторів з @GDScript.NAN відрізняється від інших. Через це результати цього методу можуть бути неточними за наявності NaN-ів.


bool operator >=(right: Vector2) 🔗

Порівнює два вектори Vector2, спочатку перевіряючи чи значення 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). Ця операція закріплює напрямок вектора, зберігаючи однакову величину. З поплавками число нуль може бути або позитивним або негативним.