Snusmumriken
Ну, физики тут особо нема. Над ней надо поработать, да и вообще переделать систему под классовые коллайдеры на колбеках. Пардон, большие гифки.
🦥Alex Fails
крутяк, а у меня физика была такая 😂
Snusmumriken
🦥Alex Fails
🦥Alex Fails
(Это я во флеше анимировал давно когда-то. все равно не въехал до конца в то, как бы это красиво сделать с моментами инерции и пр.)
Alexander
большой адронный взбалтыватель
Snusmumriken
Ну, он хоть ПОВОРАЧИВАЕТСЯ : 3
Значит уже не AABB.
Другое дело что для всяких платформеров с прочими 2d-игрулями супер-реальная физика не нужна.
Alexander
Snusmumriken
Вот тут - физон абсолютно упругих столкновений + несколько шейдеров.
Но за счёт простоты формы, нет никаких сложных пертурбаций. Факт коллизии считается тупо как сумма радиусов, вектор выхода - сумма радиусов - дистанция между объектами.
Snusmumriken
Alexander
абсолютно упругие столкновения - боже упаси
Alexander
некорректный обсчет абсолютно упругих столкновений может же приводить к казусам, когда ты чуть-чуть толкнул автомобиль у стены, на сантиметр, а он взлетел на десять метров вверх
Alexander
в игрушке типа carmageddon такое весело, но когда у тебя симулятор городской среды, с цивильными пешеходами и зданиями и прочим, чешешь репу
Snusmumriken
Ты можешь увидеть на гифке, как сильно отскакивает самый мелкий камушек.
Импульс - масса * вектор движения. Масса и размер, в данном случае - одно и то же (по экспоненте, но всё же). Очень большие объекты - очень, очень инертные.
Alexander
ага, очень реалистично отображено
Snusmumriken
Ну, по сути, это простенький решатель коллизии, когда мы передаём собственное ускорение. Всё из рукипедии.
Snusmumriken
Roman
Snusmumriken
Офигенно. Давай без этого, лады?
Alexander
разложение вектора импульса по координатным осям, проведенным через центры круглых тел.
получается, в общем случае (для тел произвольной формы) вдоль нормали и касательной плоскости соударения.
Alexander
и что если нормаль не проходит через центр масс тела, то образуется вращательный момент
Alexander
это увлекательно и я понял, но в моем ближайшем будущем задачек по физике твердого тела не предвидится :)
Alex
Snusmumriken
Да, именно так : 3
В луях встроены ограничения на метки, из серии 'нельзя ссылаться на метки вне области видимости', плюс говорящие имена. Вдобавок, тут промежуточный вариант: он будет заменен на вызов колбеков, и метка будет ниже точки перехода на три-пять строк.
Alex
Тут самый кейс для if. :)
Alex
Если это — тогда итерация выполняется.
Snusmumriken
Хех, меня слегка напрягают люди, которые бросаются из крайности в крайность.
"Дейкстра сказал что goto - говно, значит все кто его используют - говно".
Хехе.
Goto, равно как и любой оператор - инструмент.
И я лучше использую его, чем буду мутить такие конструкции:
if a > b then
if c < b then
if e > 25 then
if c < 25 then
if k > 35 then
if d > e then
a = 10
end
end
else
if k > 22 then
if d > e then
a = 15
end
end
end
end
end
Snusmumriken
Конструкция для примера.
На моей практике, хорошо воспринимается вложенность до трёх уровней.
Alex
Snusmumriken
Ну что поделать, какой есть : )
Alex
Напрягают люди в интернете и я почему-то только за то, что имею своё мнение — сходи подрочи.
Alex
А в твоём примере сейчас — это всё объединяется в пару простых условий.
Snusmumriken
> Конструкция для примера.
Это чисто демонстрация вложенности. Мне лень придумывать примеры, где это было было бы обосновано и сокращалось через goto, благо подобный пример я приводил выше.
На тему напряжения по поводу чужого мнения - аналогичное утрирование, ибо я просто не имею личных дел с такими людьми : )
Спасибо за совет, но я нахожу его неудачным: мастурбацией снимается возбуждение цнс. Напряжение - другими способами.
Alexander
У меня такой вывод, что любое средство хорошо, если оно понятно
Snusmumriken
Да. Обычно, понятными являются традиционные приёмы, но можно сделать так чтобы что-то необычное было понятным. Например, оставив комментарий, или используя говорящие имена.
Я использовал три тонкости, используя goto:
1. Объективная польза;
2. Говорящая метка, по имени стандартного оператора во многих языках, с соответствующим поведением;
3. Хвост метки в области видимости даже небольшого монитора, отдельно выделен на собственной строке.
Alexander
Тем более, что в луа goto не бездумный опасный jump как в Си setjmp, а структурно ограниченный
🦥Alex Fails
Alejandro Jeditobe
Ой нафлудили )
🦥Alex Fails
не. тут онтоп беседа
Alejandro Jeditobe
Нафлудили онтоп )
🦥Alex Fails
🦥Alex Fails
Alejandro Jeditobe
https://github.com/rjpcomputing/luaforwindows/blob/master/README.md
Alejandro Jeditobe
Все видели?
🦥Alex Fails
🦥Alex Fails
а, импульсы
🦥Alex Fails
ну это просто
🦥Alex Fails
меня больше парят моменты инерции
🦥Alex Fails
вот с ними я не вкурил чот)
Snusmumriken
Ситуация жидкого вакуума, какая инерция? : 3
Хотя она моделируется множителями скалярного произведения к нормали поверхности, об которую производится трение, и коэффициентами трения.
Alejandro Jeditobe
Да вообще просто
Snusmumriken
Да вообще просто
Тут тупая эрудиция и математика девятого класса. Если открыть учебник по физике - можно сразу вспомнить, и это объективно просто. Особенно учитывая то, что мы программируем и можем ошибаться сколько угодно раз : 3
Сдавать это на экзаменах, когда нет источников информации и неизвестен ответ - гораздо сложнее.
Snusmumriken
vvzvlad
всем привет.
есть скрипт на LUA, который запускается как lua /root/unwired_smarthome/router.lua, т.е. не из папки в которой скрипт, а из другого места. В скрипте загруаются сторонние файлы. Если с библиотеками в системных папкам все понятно, то вот с файлами, которые должны лежать рядом со скриптом, не очень понятно, как их загрузить.
т.е. делаю local version = require("version"), который лежит рядом (/root/unwired_smarthome/version.lua), и он его не видит, так как текущий PATH "/". Попробовал сделать LUA_PATH="/root/unwired_smarthome/?.lua", но тогда он перестает находить системные библиотеки.
Хардкодить путь к нему внутри файла — не варинт, хочу, чтобы было переносимое.
Светомеч
всем привет.
есть скрипт на LUA, который запускается как lua /root/unwired_smarthome/router.lua, т.е. не из папки в которой скрипт, а из другого места. В скрипте загруаются сторонние файлы. Если с библиотеками в системных папкам все понятно, то вот с файлами, которые должны лежать рядом со скриптом, не очень понятно, как их загрузить.
т.е. делаю local version = require("version"), который лежит рядом (/root/unwired_smarthome/version.lua), и он его не видит, так как текущий PATH "/". Попробовал сделать LUA_PATH="/root/unwired_smarthome/?.lua", но тогда он перестает находить системные библиотеки.
Хардкодить путь к нему внутри файла — не варинт, хочу, чтобы было переносимое.
https://stackoverflow.com/questions/8561659/lua-change-current-working-dir-linux-without-lfs-or-any-non-std-modules
Snusmumriken
package.path = package.path..';/root/unwired_smarthome/?.lua'
Ну, а если заводишь через интерпретатор и хочешь автоматизации -
package.path = package.path..';'..(...)..'/?.lua'
Мне нравится как это выглядит из-за обилия точек.
Alexander
Alexander
Snusmumriken
А в чём проблема?
Alexander
вот демо-пример
$ lua /tmp/ttt/test.lua
/tmp/ttt/
$ cat /tmp/ttt/test.lua
print (debug.getinfo(1).source:match("@?(.*/)"))
$
Alexander
и получающуюся строку прикрепляем в package.path
Alexander
полная автоматизация
Alexander
$ pwd
/home/asa
$ cat /tmp/ttt/test.lua
package.path = package.path..';'..(debug.getinfo(1).source:match("@?(.*/)"))
print (package.path)
$ lua /tmp/ttt/test.lua
./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/tmp/ttt/
Alexander
Alexander
Alexander
а будет разница между (...) и debug.getinfo(1) при обращении внутри подключаемого модуля в другом каталоге?
vvzvlad
у, спасибо!
Alexander
Alexander
☝️ я потому и решил, что универсального рецепта у тебя нет
Snusmumriken
Первую часть - как костыль, чтобы быстро тестить : 3
Alexander
Alexander
Alexander
если подключаем модуль в другом каталоге, и он будет вызывать либо (...) либо debug.getinfo, он получит разные результаты и какие именно?
Alexander
я могу проверить сам, конечно, но пока лень