Snusmumriken
Перебор зависимостей.
Snusmumriken
Первое.
Egor
ну как бы, это такие вот функции, которые нужны на многих местах, как вариант можно просто копипастить... но не тру же
Snusmumriken
Библиотека это набор функций определённой категории. В наборе от luapower есть "вспомогательная" либа glue: https://luapower.com/glue, правда тут намешано всё подряд.
Snusmumriken
А так —
local str = require'strhelper'
local tbl = require'tblhepler'
local t = str.split('mama mia', ' ')
-- условно сортируем по длине строк
tbl.strsort(t, '#')
Snusmumriken
Делать библиотеку на одну функцию — плодить вот такое: https://habr.com/ru/post/280099/
Так что категоризируем, ребята, категоризируем. И ручками объединяем в нормальные библиотеки.
Anonymous
Для сишки есть амальгаматоры конечно
Anonymous
Но не для библиотек
Anonymous
По крайней мере я только с прикладным кодом такое видел
Egor
А в луа действительно нету round? и каждый реализует как может?
Mark ☢️
Egor
А для чего он нужен ?
округление с определенной точностью.. короче у меня простол проблема с луа. в цикле либо суммирую либо вычитаю с нуля 0.2 и когда число доходит до 0.4 и делаю вычитание, и выходит какое-то несуразное число в виде 0.09и_овердофига_чисел. Почему не 0.2? И подумал что смогу себе помочь округлением
Mark ☢️
Mark ☢️
Ну дофига 9к и чо
Mark ☢️
Может тебе надо работать с целыми числами а когда надо делить на 10 ?
Egor
fgntfg
Egor
Mark ☢️
Serezha
Serezha
Забей это во всех языках одинаково стандарт IEEE 754
Serezha
Форматировать при печати или передаче в JSON нужно а не округлять
Egor
Egor
или принтф делал.
Serezha
string.format("%.2f",123.2375)
Serezha
Serezha
Он не может 0.1999999999999 округлить до точно 0.2
Serezha
Просто при печати на экран автоматически обычно форматится с некотрым округлением и ты не знаешь что в памяти не 0.2 а 0.19999..999
Ivan
https://0.30000000000000004.com/
Serezha
Maxim
Вооооу! Ваще тема
Для решения вашей задачки есть один подход, в определенных условиях этот подход возможен к применению для достижения необходимого результата.
Представьте что у вас нет функции округления, ну или условия задачи запрещают использовать эту функцию, представили? А теперь решение, готовы?
Maxim
Превратите float в integer, проведите необходимые вычисления, превратите integer в float
Snusmumriken
(типа, реакция на самописный ивент пеоесечения грани полигона, можно заметить что время от времени ивент не срабатывает)
Snusmumriken
Ну, то есть оно далеко не каждый раз нормально определяло выход точки за границы полигона из-за ошибок округления.
То как оно должно работать, с округлениями — вот тут (а ещё тут автоуменьшение сложности полигонов).
Egor
Помогите, я чет ппц туплю. Есть кораблик, знаю его скорость - speed, знаю время за которое он достигнет какой-то точки - td, знаю через сколько торможение остановит мой кораблик - tb и могу давать тягу Делаю так
if td<=tb+30 then -- +30 это чтоб наверняка осталось времени на торможение
brakeStart()
stopEngine()
else startEngine() -- даю тягу, чтобы долетел быстрее
brakeStop()
end
Но проблема, когда до места назначения остаются считанные километры, то я тащусь кое-как до точки, иногда с скоростью менее 1км.
Как сделать так, чтобы торможение отключались, если скорость меньше определенного значения?
Egor
PS: спал три часа и кофе кончилось (
🐅🤦♂️
Если не сложно, то собери и выложи минимальный рабочий пример. Мне непонятно, как ты можешь знать время, за которое кораблик достигнет определенной точки. Ты надеюсь не высчитывал это временя деля расстояние между кораблем и точкой назначения на скорость движение? Ведь если ты начинаешь менять скорость, то и время прибытия меняется.
Egor
Snusmumriken
Помогите, я чет ппц туплю. Есть кораблик, знаю его скорость - speed, знаю время за которое он достигнет какой-то точки - td, знаю через сколько торможение остановит мой кораблик - tb и могу давать тягу Делаю так
if td<=tb+30 then -- +30 это чтоб наверняка осталось времени на торможение
brakeStart()
stopEngine()
else startEngine() -- даю тягу, чтобы долетел быстрее
brakeStop()
end
Но проблема, когда до места назначения остаются считанные километры, то я тащусь кое-как до точки, иногда с скоростью менее 1км.
Как сделать так, чтобы торможение отключались, если скорость меньше определенного значения?
Во-первых, что с форматированием? Ты прямо копипастил из кода? Почему всё настолько криво? ))
Egor
Egor
точнее кусочек кода.
Egor
какой ужас -_-
Snusmumriken
Ну типа в таком виде оно влезет в т.ч. в экраны телефонов, чтобы даже телефоноюзеры могли примерно прикинуть что не так (тут есть мелкие правки от снуса, чтобы кодить было проще)
-- +30 это чтоб наверняка
-- осталось время на торможение
local td = self:timeToArrival(object)
if td <= tb + 30 then
self:stopEngine()
self:brakeStart()
else
-- даю тягу, чтобы долетел быстрее
self:startEngine()
self:brakeStop()
end
Во-вторых, псевдокод выглядит лучше чем код, можно было бы код сделать таким же.
Egor
Ну типа в таком виде оно влезет в т.ч. в экраны телефонов, чтобы даже телефоноюзеры могли примерно прикинуть что не так (тут есть мелкие правки от снуса, чтобы кодить было проще)
-- +30 это чтоб наверняка
-- осталось время на торможение
local td = self:timeToArrival(object)
if td <= tb + 30 then
self:stopEngine()
self:brakeStart()
else
-- даю тягу, чтобы долетел быстрее
self:startEngine()
self:brakeStop()
end
Во-вторых, псевдокод выглядит лучше чем код, можно было бы код сделать таким же.
Спасибо, я понял о каком форматировании ты говорил. А код, он будет еще рефакториться, сейчас просто разбил на несколько модулей, которые будут универсально подходить на любые типы транспорта. И да, напоминаю, я не пишу игру. Я просто пишу "мод" (сама игра дает автоматизировать с помощью луа многие вещи).
🐅🤦♂️
А, если ты моддишь, то другое дело. Я думал ты сам физику движения писал.
Snusmumriken
Уууу, а я уже начал расписывать архитектуру. Что за игрушка-то?
Egor
Egor
eve online + спейс инженеры
Snusmumriken
Так, тут нормальная космическая физика? Разгоняться можно до неограниченных скоростей?
Egor
Сейчас написал "автопилот", который бы доставил меня на другую планету, все работает, кроме этого, что до самой точки назначения, слишком медленно лечу. Т.е. разгон/торможение отрабатывает, но на последних милях слишком маленькая скорость
Egor
но это в вакууме (космосе), на планете есть как гравитация и сопротивление атмосферы, ( но это другая тема)
Snusmumriken
А тормозит оно с какой скоростью? С такой же как разгоняется?
🐅🤦♂️
Snusmumriken
Потому что в нормальной космической физике, самое эффективное — пол пути разгоняться маршевыми двигателями, а потом развернуться двиглами вперёд, и оставшиеся пол пути теми же маршевыми тормозить ))
Egor
Egor
так, кто может толкнуть в правильную мысль? )
Snusmumriken
А во-вторых, у тебя погрешность вот в этом "+30", то есть точно вычисли время на торможение.
Egor
Egor
с учетом массы корабля и тяги, которая дает тормозной движок
Snusmumriken
brakeTime(150000):getTime()
Что тут за 150000?
Egor
function brakeTime:getTime()
local shipMass = core.getConstructMass()
local speed = vec3(core.getWorldVelocity()):len()
local c = 8333
--F = 150000 -- brake newtons
return shipMass * c / self.F * math.asin(speed / c)
end
Egor
c = это магическая скорость, как "скорость света"
Egor
т.е. максимальная скорость в м/с в игре
Snusmumriken
Жуть. В общем, как ни странно, оно примерно корректно, так что попробуй убрать +30 и проверить константы.
Egor
А что если сделать еще и так:
-- +30 это чтоб наверняка
-- осталось время на торможение
local td = self:timeToArrival(object)
if td <= tb + 30 then
self:stopEngine()
if speed <= 15000 then
self:brakeStart()
end
else
-- даю тягу, чтобы долетел быстрее
self:startEngine()
self:brakeStop()
end
Egor
сделал так и так, буду пробовать