Ktlo 789 Опубликовано: 30 августа, 2015 (изменено) После того, как я написал про метатаблицы в Lua, захотелось провернуть что-нибудь этакое. Данная библиотека добавляет одну основную функцию, которая возвращается при вызове этой библиотеки с помощью require(module: string). Эта функция возвращает вектор и принимает в качестве аргументов числа, которые соответствуят каждому новому измерению в векторе. Но сначала, разумеется нужно скачать библиотеку. Вы можете сделать это с помощью команды в OpenOS или CraftOS. pastebin get mdfDvmps /lib/vector.lua Разумеется в CraftOS нет никакого require(), но вы можете посмотреть эту тему . Хотя также в 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 Если хотите увидеть что-нибудь ещё в этой библиотеке, пишите. Постараюсь добавить. Изменено 30 августа, 2015 пользователем Ktlo 6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 30 августа, 2015 Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo Автор темы 789 Опубликовано: 30 августа, 2015 Советую сменить название темы. Какое посоветуешь? Признаю, сочинять названия я не умею. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 30 августа, 2015 Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы. Это не векторы из С++, это векторы из математики. Я считаю текущее название подходит. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo Автор темы 789 Опубликовано: 30 августа, 2015 (изменено) Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы. Подожди, это не динамические ли массивы в С++? Я то сделал библиотеку для работы с векторами из линейной алгебры. Изменено 30 августа, 2015 пользователем Ktlo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo Автор темы 789 Опубликовано: 30 августа, 2015 Исправил некрасивый и длинный вывод вектора через tostring() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy 1 169 Опубликовано: 31 августа, 2015 Пробежался по коду. Написано довольно аккуратно, стандартизированно и с высокой производительностью. Но для частных случаев, реализация под конкретную размерность (например трехмерный вектор) будет быстрее твоей. Расскажи, какая область применения такого многоразмерного вектора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 31 августа, 2015 Пробежался по коду. Написано довольно аккуратно, стандартизированно и с высокой производительностью. Но для частных случаев, реализация под конкретную размерность (например трехмерный вектор) будет быстрее твоей. Расскажи, какая область применения такого многоразмерного вектора? Удовольствие получить, наверное)) 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ivan52945 75 Опубликовано: 31 августа, 2015 (изменено) Удовольствие получить, наверное)) Чтоб внукам было что рассказать (кроме различных дворовых Adventures time и института time) Изменено 31 августа, 2015 пользователем ivan52945 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 31 августа, 2015 Чтоб внукам было что рассказать (кроме различных дворовых Adventures time и института time)Буду внукам рассказывать как мне два великих человека подарили уголь и как меня убила ведьма. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 1 сентября, 2015 Сначала подумал что эта библиотека предоставляет интерфейс для работы с векторной графикой. Как оказалось, векторы из C++. Советую сменить название темы. , ты все уроки математики прогулял. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 1 сентября, 2015 , ты все уроки математики прогулял. Или же он ещё не дорос до векторов)) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 23 сентября, 2016 Обожаю некропостить, особенно, когда есть причина :P Отпушил эту действительно полезную библиотеку на OpenPrograms. oppm install libvector. Странно, что тема висит незакреплённой в разделе. И сам ещё несколько раз пролистывал, когда отбирал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах