Перейти к содержимому
Ktlo

Векторная библиотека

Рекомендуемые сообщения

После того, как я написал про метатаблицы в Lua, захотелось провернуть что-нибудь этакое. Данная библиотека добавляет одну основную функцию, которая возвращается при вызове этой библиотеки с помощью require(module: string). Эта функция возвращает вектор и принимает в качестве аргументов числа, которые соответствуят каждому новому измерению в векторе. Но сначала, разумеется нужно скачать библиотеку. Вы можете сделать это с помощью команды в OpenOS или CraftOS.

 

pastebin get mdfDvmps /lib/vector.lua

 

Разумеется в CraftOS нет никакого require(), но вы можете посмотреть эту тему  :D. Хотя также в CraftOS есть своя библиотека с векторами.

Вернёмся к основной функции, если до сих пор не понятно, как она принимает аргументы, я просто запишу вот так: vector(x: number, y: number, z: number, ... ). Как видите у вектора может быть не ограниченное (ограничивается возможностями Lua) количество измерений.

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

local vector = require "vector"
local a = vector(1, 5, 89, 6)
print(a.n)
--> 4

Все операции с векторами создают новые вектора, а не изменяют старые.

 

Теперь я опишу все операции с вектором

 

local vector = require "vector"
local a = vector(5, 8, 9)
local b = vector(78, 3, -13, 56)

print(a + b) --Каждый результат можно вывести через print наглядным образом
--> {83; 11; -4; 56}

print(a - b)
--> {-73; 5; 22; -56}

print(a * 8) --Также можно записать 8 * a
--> {40; 64; 72}

print(b / 42)
--> {1.857; 0.071; -0.310; 1.333}

print(a * b) --Произведение векторов
--> {-131; 767; -609}

print(a == b)
--> false

print(#a, #b) --Длинна вектора
--> 13.038404810405   96.943282387177 

 

 

 

Методы:

 

  • vector:tostring(point: number or nil):string — эквивалентно tostring(vector), в качестве дополнительного аргумента может принять количество символов после запятой, по стандарту 3
  • vector:add(vector2: table):table — эквивалентно vector + vector2
  • vector:sub(vector2: table):table — эквивалентно vector - vector2
  • vector:mul(vector2: table or number):table — эквивалентно vector * vector2
  • vector:div(number: number):table — эквивалентно vector / number
  • vector:len():number — эквивалентно #vector, длинна вектора
  • vector:dot(vector2: table):number — скалярное произведение векторов
  • vector:cross(vector2: table):table — произведение векторов, возвращает новый вектор
  • vector:normalize():table — нормализует вектор
  • vector:angle(vector2: table):number — возвращает угол между векторами в радианах, как и все операции с углами в Lua (чтобы перевести в градусы: result / math.pi * 180)
  • vector:round():table — округляет вектор
  • vector:eq(vector2: table):boolean — эквивалентно vector == vector2

 

 

Если хотите увидеть что-нибудь ещё в этой библиотеке, пишите. Постараюсь добавить.

Изменено пользователем Ktlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Советую сменить название темы.

 

Какое посоветуешь? Признаю, сочинять названия я не умею.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы.

 

Это не векторы из С++, это векторы из математики.

Я считаю текущее название подходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы.

 

Подожди, это не динамические ли массивы в С++? Я то сделал библиотеку для работы с векторами из линейной алгебры.

Изменено пользователем Ktlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Исправил некрасивый и длинный вывод вектора через tostring()

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пробежался по коду. Написано довольно аккуратно, стандартизированно и с высокой производительностью.

Но для частных случаев, реализация под конкретную размерность (например трехмерный вектор) будет быстрее твоей.

 

Расскажи, какая область применения такого многоразмерного вектора?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пробежался по коду. Написано довольно аккуратно, стандартизированно и с высокой производительностью.

Но для частных случаев, реализация под конкретную размерность (например трехмерный вектор) будет быстрее твоей.

 

Расскажи, какая область применения такого многоразмерного вектора?

Удовольствие получить, наверное))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Удовольствие получить, наверное))

 

Чтоб внукам было что рассказать  :)(кроме различных дворовых Adventures time и института time)

Изменено пользователем ivan52945

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтоб внукам было что рассказать  :)(кроме различных дворовых Adventures time и института time)

Буду внукам рассказывать как мне два великих человека подарили уголь и как меня убила ведьма.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы.

:facepalm: , ты все уроки математики прогулял.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Обожаю некропостить, особенно, когда есть причина :P

Отпушил эту действительно полезную библиотеку на OpenPrograms. oppm install libvector.

Странно, что тема висит незакреплённой в разделе. И сам ещё несколько раз пролистывал, когда отбирал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...