|
|
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Привет кодеры. Кубики заданы в левой системе координат (x,y,z) как точка центра и размер кубика. Код: plaintext 1. 2. 3. 4. 5. Задан луч. С точкой начала (x1,y1,z1) и вектором направления (xv,yv,zv). Луч - бесконечен. Но как-только он попадает в кубик - расчеты заканчиваются и дальнейшее продолжение луча нам - неинтересно. Код: plaintext 1. 2. 3. 4. Если на пути луча встречается множество кубиков - то необходимо понять какой будет пересекаться первым. Необходим расчет пересечения луча и кубика. Welcome. P.S. Хардкод и асм - приветствуется. P.P.S. Моар хардкода... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 12:32 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
mayton, постыдись, такие задания студентам на лабах дают. Просто нужно не полениться, взять ручку с бумажкой и расписать систему неравенств/уравнений, ничего сложного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 12:37 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Это для затравки. Чуть позже я опишу блоки кубиков. P.S. Я пристыдился на 0.01 % ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 12:47 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Ну блин. Самоеж главное не сказал. Грани кубика ортогональны системе координат. Тоесть кубик (0,0,0) размером 1.0 будет лежать в начале координат и иметь вершины (0.5,0.5,0.5), (-0.5,0.5,0.5)..... (-0.5,-0.5,-0.5) соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 15:36 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
mayton, это облегчает твою задачу. Подсказка: чтобы луч попал в кубик необходимо и достаточно чтобы хотя бы одна точка на луче оказалась внутри кубика. У луча всего одна степень свободы, поэтому достаточно одной переменной (любой координаты), остальные выражаются через нее. Таким образом получаем систему из 3-х двойных неравенств (положение между гранями куба) и одного простого (направление луча). Продолжать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:07 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
mayton, далее находится пересечение интервалов всех неравенств. Оно будет либо пустым (луч летит мимо), либо односвязным интервалом (луч попадает), причем границы интервала будут соответствовать точкам входа/выхода. Где какая - надеюсь разберешься. Вроде все, дальше нужно учебник математики брать за 7 класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:17 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
OMG! Да не будьте такими сердитыми. Кубик-то - четверговый. Это раз. Второе - где ваш хардкод и ассЭмблер? Это два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:19 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Хардкор на работе. Завтра "прототип" сдавать инвестору, но одной из требований ивестора, что бы прототип работал в режиме 24x7 ))) Ни ТЗ, ни дизайна, ни нормального тестирования/мониторинга т.к. "прототип", но 24x7 ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:23 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Ладно. Нелетает кубик. Попрошу дневального закрыть топик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:24 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevХардкор на работе. +1 mayton, дело не в кубиках, просто неправильный четверг выбрал: последний день месяца/квартала/полугодия - этож дедлайн у многих, а тут еще сезон отпусков в разгаре - за себя трудись и за отдыхающего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:32 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Ну извини. У меня тот долгий джоб компилируется.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:37 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevХардкор на работе. Завтра "прототип" сдавать инвестору, но одной из требований ивестора, что бы прототип работал в режиме 24x7 ))) Ни ТЗ, ни дизайна, ни нормального тестирования/мониторинга т.к. "прототип", но 24x7 ))) А что прототип не проработает неделю без рестарта ? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 18:07 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
д0kА что прототип не проработает неделю без рестарта ? Он бы два дня проработал ((( 1) Он с I-net через tor данные тянет, tor и источник имеет тенденцию периодически отваливаться. 2) тянет данные в over 150 потоков на один исходный запрос и примерно в таком же кол-ве и считает ))) секунд по 30-60 Т.ч. повесить - раз плюнуть. Пару раз на релоад нажать и на мой взгляд под виснуть должно надолго и качественно ))) нормальных исходных данных нет (очень много бабла стоят), приходится из Инета тянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 18:31 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Ну и хостится все на паре tiny машинок из Amazon EC2 (1 GB RAM) ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 18:32 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисmayton, постыдись, такие задания студентам на лабах дают. Просто нужно не полениться, взять ручку с бумажкой и расписать систему неравенств/уравнений, ничего сложного. может быть тут и нет ничего сложного, но вашего решения я не увидел. Вопрос был не о том, как определить встретит ли луч кубик, а о том, как за минимальную асимптотику найти такой кубик, если он конечно существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 10:07 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисТаким образом получаем систему из 3-х двойных неравенств (положение между гранями куба) и одного простого (направление луча).Расстояния от центров кубов до прямой(луча) не быстрее будет подсчитать? А пересёкшихся(по сферам радиусом a*sqrt(3)), начиная с ближайших, уже допроверить "по-честному". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 10:21 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
tanglirСоколинский БорисТаким образом получаем систему из 3-х двойных неравенств (положение между гранями куба) и одного простого (направление луча).Расстояния от центров кубов до прямой(луча) не быстрее будет подсчитать? А пересёкшихся(по сферам радиусом a*sqrt(3)), начиная с ближайших, уже допроверить "по-честному".А зачем? Вся "честная" проверка займет максимум 20 строк кода без циклов. Теоретически нужно еще отдельно вырожденный случай проверить, когда луч направлен перпендикулярно оси X, но формулировка задания такое исключает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 10:31 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
В общем случае луч (выстрел) пересекает 6 плоскостей (Plane[0..5]) которые образованы гранями куба. Почему удобно начинасть с плоскостей? Ну... я так изначально задал условия. Грани всегда будут компланарны к плоскостям XOY, XOZ,YOZ. Из этих 6 плоскостей нас будут интересовать только от 1 до 3х которые обращены лицевой гранью к источнику луча (x1,y1,z1). Решаем 3 уравнения пересечения луча с плоскостью Plane[i]. Из трех результирующих точек только одна будет лежать на поверхности куба. Над последней проверкой я еще думаю. Как ее сделать с наименьшим числом операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 10:33 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Да. Некоторые краевые случаи. Когда луч смотрит в противоположное от куба направление - решения нет. Когда луч - параллелен (компланарен) к плоскости ? Я щас не могу навскидку вспомнить форумулу но три произвольных вектора компланарны, когда их смешанное произведение равно нулю. (В данной задаче нам 0 не нужен мы можем брать очень малую величину 0.00000001 в double и считать это нулем). При чем здесь 3 вектора? Плоскость можно задать (емнип) 3 формами уравнений. Каноническое. Вида Ax + By + Cz + D = 0 либо различные его варианты с нормированием коэффициентов. Наиболее удобная на мой взгляд форма задания плоскости для нашей задачи - это 3 точки или 2 вектора (порядок важен). Это всё одно и то-же и от одной формулы к другой можно переходить. Единственное - договориться о порядке лицевой и изнаночной граней. Для нашего случая (плоскости всегда компланарны к ZOX, ZOY .....) формула упрощается т.к. из нее уходит 1 коэффициент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 12:05 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
mayton, чтобы исключить вырожденные случаи можно параметрическое задание луча использовать: x=x0+Vx*t; y=y0+Vy*t, z=z0+Vz*t, t>0. Тогда все неравенства будут по виду одинаковыми и одинаково решаться: если соответствующий коэффициент равен нулю, проверяем попадание x0 в диапазон, если нет - находим t1/t2 на границах проверяем на положительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 13:37 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
Если честно я не понял зачем нужно вводить параметр t. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 13:39 |
|
||
|
Четверговый кубик
|
|||
|---|---|---|---|
|
#18+
По сути мы ищем функцию которая вернет нам точку попадания в блок кирпичиков. Либо null если мы промахнулись. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2016, 13:43 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39265399&tid=1340667]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 460ms |

| 0 / 0 |
