crypt of decay - факторио [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

факторио [Apr. 7th, 2021|12:41 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
Linkmeow!

Comments:
From:[info]phantom
Date:April 19th, 2021 - 05:06 pm
(Link)
Хз, чоэта, могу в шарик статике только рассказать.
[User Picture]
From:[info]ketmar
Date:April 19th, 2021 - 05:24 pm
(Link)
в статике кто угодно может, это скучно и неинтересно. в динамике, впрочем, тоже очень просто, я уже умных книжек читал.
From:[info]phantom
Date:April 19th, 2021 - 05:29 pm
(Link)
Ок.
From:(Anonymous)
Date:April 20th, 2021 - 04:49 am
(Link)
расскажи мне! мне интересно, без шуток

/ЧД/
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 05:02 am
(Link)
да ты пойди на сайт ebooks-it.org, и спи… возьми для ознакомления там книгу Real-Time Collision Detection. там много формул, но даже если голова и лопнет — она всё равно не нужна.
From:(Anonymous)
Date:April 27th, 2021 - 06:12 pm
(Link)
а в 2d тупо сеточка/квадро-дерево прокатит? или есть существенно быстрее способы
[User Picture]
From:[info]ketmar
Date:April 27th, 2021 - 10:39 pm
(Link)
ну как бы так сказать… если бы был универсальный лучший метод для всего — то давно бы все его использовали и другими не парились.

зависит от твоих задач, типов и количества объектов в мире, etc. для D2D:F я использовал тупо грид, например. пробовал динамическое дерево ещё, оно оказалось удобней для рэйкастов, но в целом медленней — потому что основная задача проверить, не наложились ли два объекта, а не свипать.
From:(Anonymous)
Date:April 28th, 2021 - 06:53 pm
(Link)
ну да это понятно, на вопрос широкий и ответ стандартный
а более четко прикинуть распределение и количество объектов на карте не выходит пока что, единственное что их будет много, и карта большая
[User Picture]
From:[info]ketmar
Date:April 28th, 2021 - 11:12 pm
(Link)
ну дык кто тебе мешает несколько вариантов попробовать? сделай нужный верхний API, а что там внизу — дело тридесятое. посмотришь, что лучше. как я в дф и пытался, и даже частично получилось.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 05:05 am
(Link)
p.s.: всё равно это всё про стандартную формулу плоскости (Ax+By+C=D), dot products, и separating axes theorem.
From:[info]phantom
Date:April 20th, 2021 - 10:03 am
(Link)
В двух словах: уравнение плоскости ax + by + cz = d, через скалярное произведение (a, x) = d. Для упрощения возьмём плоскость, проходящую через ноль: (a, x) = 0. Вектор а перпендикулярен плоскости, нормализуем его до единичного.

Центр шарика r проецируем на а, получаем вектор (a, r)a, и r разлагается на (a, r)a и r - (a, r)a, вектор, лежащий в плоскости. Если расстояние от центра шара до плоскости (a, r) < R радиуса шара, то есть коллизия (надо знаки ещё учитывать).

Чтобы вытолкнуть шар из плоскости, надо сдвинуть центр до R из плоскости в направлении а. Новый центр шара будет = r - (a, r)a + Ra = r + (R - (a, r))a.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 03:46 pm
(Link)
или в терминах программера:

signeddist = DotProduct(plane.normal, sphere.origin)-plane.dist;
movedist = sphere.radius-fabsf(signeddist);
if (movedist <= 0) return;
sphere.origin += plane.normal*movedist;

потому что никому не надо выталкивать в негативное полупространтсво обычно, так что можно ничего не проверять.
From:(Anonymous)
Date:April 22nd, 2021 - 04:04 am
(Link)
спасибо вам обоим!

книжку я уже стащил, но до сентября у меня времени добраться до неё вряд ли будет.

/ЧД/
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 03:47 pm
(Link)
абля, это чд писал, а вышло тебе. извини, промахнулся.
From:[info]phantom
Date:April 20th, 2021 - 04:59 pm
(Link)
Так он же всё равно не получает мыло, а мне тоже интересно.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 05:01 pm
(Link)
так ты то же самое написал, только для умных, а не для кодомакак.
From:[info]phantom
Date:April 20th, 2021 - 05:33 pm
(Link)
Да не, это ж тоже самое, только на другом "языке".
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 05:43 pm
(Link)
дык я ж об том же. просто мне математический вид, например, читать сложнее — привычки нет. так-то оно практически 1:1 переводится туда-сюда.
From:[info]phantom
Date:April 20th, 2021 - 08:16 pm
(Link)
Мне нравится мат. нотация - за чистоту и элегантность. Но попрактиковаться с ней нужно много, это да.

Обратный перевод, применение ЯП в таких науках, как математика и физика, мне кажется, недооценено. Нужно больше в ту сторону работать. Хороший пример, что может получиться отлично, - книга structure and interpretation of classical mechanics... никак не дойдут руки изучить её.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 08:51 pm
(Link)
так-то оно да, матнотация хорошая. но её же с непривычки читать не менее увлекательно, чем санскрит, и понятно примерно так же. а поскольку мне обычно нужно чтобы взять и в код запихать, а не разбираться, из какого измерения кошмаров эти формулы достали, то я и читаю редко. поэтому приходится со словарём, и сразу же переводить.
From:[info]phantom
Date:April 20th, 2021 - 09:56 pm
(Link)
Ну, я считаю, лучше одну формулу понять, чем тонну кода налабать. Ваще, чем меньше кода пишут тем лучше. Особенно когда пальцы обгоняют мысль или когда мысль куда-то ушла... навсегда... и не вернулась.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 10:04 pm
(Link)
understanding is not required. only obedience. как-то так.

это учёным понимать надо, откуда оно вылезло. а инженеру достаточно знать что будет, если вот там дёрнуть, а вот тут покрутить.

опять же: кому как думать удобней. мне удобно думать кодом. написал хуйню, выкинул хуйню. написал заново меньшую хуйню. выкинул меньшую хуйню. повторять пока не надоест: авось в итоге выйдет не очень хуйня.

вот я тогда задачу решил таки, сочинил какую-то адовую хуйню из формул, жуть и мрак. но решил же. а потом почитал умных книжек — и выкинул.
From:[info]phantom
Date:April 20th, 2021 - 10:19 pm
(Link)
Не, ну, я отрицаю монополию каких-то там учёных на понимание. По мне, так это самое ценное и важное, и должно быть доступное каждому. И если какие-то четырёхглазые долдоны, захватившие кресло профессора где-то в университете, будут играть патрициев, то пошли они на хуй строем.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 11:03 pm
(Link)
я не совсем про это. я про то, что мне для применения понимать, как оно получилось — не обязательно, достаточно знать, как оно работает. обычно я этим уровнем и ограничиваюсь. потому что жизнь короткая, а интересных вещей на свете много. меня тупо на все не хватит, увы. были бы в запасе тыщи продуктивных лет — тогда другое дело.
From:[info]phantom
Date:April 20th, 2021 - 11:10 pm
(Link)
А я в последние годы наоборот. Лабаю больше для понимания или переписываю, пока не станет форма идеальной, для красоты. Потому что жизнь короткая, а искусство длинное, как говорится.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 11:25 pm
(Link)
поэтому ты и не инженер, наверное. инженеру надо решить задачу. по возможности не очень костыльно, но не в ущерб, собственно, решению. так что по достижении некоторого баланса костылей и идеала задача считается решённой удовлетворительно.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 11:25 pm
(Link)
ну, ты понял, я про стиль мышления это имел в виду.
From:[info]phantom
Date:April 20th, 2021 - 11:29 pm
(Link)
Ага. Ну, по натуре я не инженер, вот и мучаюсь. Подчёркивал различие, так сказать.
From:(Anonymous)
Date:April 21st, 2021 - 01:50 am
(Link)
Если это нельзя запрограммировать - значит, это нахуй не нужно. Математишки идут в пизду.
From:[info]phantom
Date:April 21st, 2021 - 09:50 am
(Link)
Хехе. Какой бойкий, розовощёкий мальчуган.
From:(Anonymous)
Date:April 21st, 2021 - 01:45 pm
(Link)
> у математишки нибамбит
From:[info]phantom
Date:April 21st, 2021 - 03:42 pm
(Link)
Чё ты хрюкаешь? Я тебя не понимаю, мальчик.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 05:46 pm
(Link)
вообще, любая задача такого типа (как и та моя, конечно) решается путём приведения её к задаче «объект и плоскость», по-моему. куда ни ткнись — в итоге получается, что где-то неявно плоскость со своей формулой затесалась. поэтому если есть двигло — лучше сразу и явно туда плоскостей напихать.
From:[info]phantom
Date:April 20th, 2021 - 08:16 pm
(Link)
Ага, и кватернионов. :)
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 08:44 pm
(Link)
а кватернионы — как говорят математики — сбежавший из лаборатории кусочек черновика какой-то хуйни, у которой я никак не могу запомнить имя. тоже чего-то там про геометрию и прочие макабрические слова. у них там есть полный вариант, но ходят слухи, что кто его понял — тот живёт в удобной комнате на социальном обеспечении, кормят его с ложечки, а острых предметов не дают.
From:[info]phantom
Date:April 20th, 2021 - 10:03 pm
(Link)
Та да, тупиковый путь развития оказался. Максвелл пытался свои уравнения в кватернионах выразить сначала, но обломался.

Но сам путь интересный, описан у Босса в книге Интуиция и математика. Кстати, рекомендую, без всяких канцеляризмов и формализмов.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 10:07 pm
(Link)
да не тупиковый же — это просто часть фигни, имя которой я забыл. аналитическая геометрия, или что-то в этом роде. кватернионы — это частный случай их формул. они говорят, что там у них намного больше интересных штук есть, а кватернионы… ну, просто вырвались на свободу раньше времени, остальной аппарат ещё не готов был.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 10:09 pm
(Link)
>описан у Босса в книге Интуиция и математика
спасибо, записал в копилочку, посмотрю.
[User Picture]
From:[info]ketmar
Date:April 23rd, 2021 - 02:46 am
(Link)
о, вспомнил. они это называют Geometric Algebra. а кватернионы — это очень криво сделаные роторы оттуда.
From:[info]phantom
Date:April 23rd, 2021 - 06:09 pm
(Link)
Спасибо, покопаюсь на досуге.
[User Picture]
From:[info]ketmar
Date:April 20th, 2021 - 03:58 pm
(Link)
момент столкновения движущейся по прямой сферы и плоскости тоже несложно. сначала проверяем на залипушку, потом делаем dotproduct movedelta и нормали плоскости (чтобы получить дельту относительно плоскости). время столкновения тогда будет (чуть модифицированое пересечение прямой и плоскости):
r = radius*fsign(plane.dist);
t = (r-dist)/DotProduct(plane.normal, movedelta);
если время в [0..1] — это время до нунестукай.
точку столкновения получаем обычно, только не забываем, что это сфера:
hitpoint = origin+t*movedelta-r*plane.normal;

с AABB всё практически так же, как и со сферой, только её радиус вычисляем так:
rad = fabsf(halfsize.x*plane.normal.x)+fabsf(halfsize.y*plane.normal.y)+fabsf(halfsize.z*plane.normal.z);

по сути, берём ближайшую к плоскости вершину AABB, и трасироваем.