|
0 / 0 / 0
Регистрация: 06.07.2010
Сообщений: 5
|
|
Пересечение двух тел в пространстве06.07.2010, 09:14. Показов 3128. Ответов 5
Метки нет (Все метки)
Привет всем!
У меня есть небольшое увлечение - иногда делаю карты к сетевым 3д бегалкам, конкретнее - quake3 и alien arena. Использую редактор карт GTKRadiant 1.5.0. При создании своей последней карты к АА я столкнулся с проблеммой ее компиляции. Вкратце суть мэппинга - рисуем пространственные элементы (стены, пол и потолок), т.е. окружение, где потом будем бегать в игре. Эти пространственные элементы (браши) могут быть пирамидами, призмами и сложными пространственными многогранниками. Проблеммы при компиляции карты возникают в том числе и из-за того, что браши могут накладываться друг на друга, пересекаться. Пересекающиеся браши лучше не рисовать на карте, но они могут появиться из-за невнимательности, ошибки и т.п. Средствами редактора карт эти проблемные участки не найти, просто отсутствует такая функция, а поэлементно рассматривать каждый браш - невозможно физически .И вот я решил сделать программу, которая бы находила эти пересечения. Результатом работы в редакторе GTKRadiant (еще до компиляции) является файл *.map. Это текстовый файл исходных данных. Не буду описывать его структуру. Скажу только, что на данном этапе создания проги, она считывает указанный файл *.map и формирует массив координат узлов каждого браша. А дальше - тупик. Нужен какой то алгоритм, по которому можно определить пересекаются ли 2 произвольных браша или нет. Прошу помочь в решении . Задача прежде всего геометрическая. Еще хочу добавить, что решение этой задачи очень простое, если подходить к нему "визуально" (нарисовать 2 тела в пространстве и посмотреть, пересекаются они или нет), и довольно сложная при попытке решить ее математически.Мозгов на решение у меня видимо не хватает . Подключайтесь пожалуйста!
0
|
|
| 06.07.2010, 09:14 | |
|
Ответы с готовыми решениями:
5
Пересечение двух треугольников в пространстве Вращения платоновых тел в 3х мерном пространстве Пересечение отрезков в пространстве |
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 06.07.2010, 09:48 | |
|
Многогранники выпуклые?
0
|
|
|
0 / 0 / 0
Регистрация: 06.07.2010
Сообщений: 5
|
|
| 06.07.2010, 09:49 [ТС] | |
|
да, браши могут иметь только выпуклые углы
0
|
|
|
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
|
|
| 06.07.2010, 11:43 | |
|
Пересечение двух многогранников эквивалентно выполнению хотя бы одного из условий:
1. Вершина одного многогранника находится внутри другого 2. Ребро одного многогранника пересекает грань другого Немного скрытого текста
Первое условие не является необходимым, т.к. многоугольники могут "наезжать" друг на друга лишь ребрами; второе - т.к. один многоугольник может находиться полностью внутри другого.
Первое проверяется по аналогии с плоским случаем (там пользуемся ориентированными площадями) - с помощью ориентированных объемов. Второе сложнее. Для каждого ребра первого и для каждой грани второго: Сначала проверяем, пересекает ли отрезок плоскость, в которой лежит грань - это делается с помощью ориентированных объемов. Если да - находим точку пересечения; отпределяем, лежит ли эта точка на грани. Это плоская задача с известным решением. Это решение жутко громоздкое, думаю, существует более простое. Буду рад увидеть его. (Если вдруг рискнете реализовать это - могу более подробно описать любой момент)
1
|
|
|
25 / 25 / 0
Регистрация: 13.12.2009
Сообщений: 81
|
|
| 06.07.2010, 23:40 | |
|
Смотри что есть у меня может поможет!!Вот сама тема с заданием https://www.cyberforum.ru/orde... 38869.html и кидаю прогу как мне это реализовали, может поможет что то.....
P.S. ______________________________________ Не забываем про поднятие репутации!!
1
|
|
|
0 / 0 / 0
Регистрация: 06.07.2010
Сообщений: 5
|
|
| 07.07.2010, 02:28 [ТС] | |
|
Спасибо за помощь! Надо подумать над этим.
При тестировании своей проги выявил баг. Структура файла *.map такова: ... ... ... // entity 0 { "classname" "worldspawn" "sky" "martian" // brush 1 { ( 448 -608 448 ) ( 448 -768 448 ) ( 0 -608 448 ) arena5/bricks4_1 0 0 0 1 1 ... ... ... Три группы скобок - это координаты трех точек, образующих одну плоскость (грань) браша, таким образом приведенная строка файла описывает одну плоскость браша N1. В призме будет 6 граней и, соответственно, 6 строк в файле. Используя данные одной строки файла можно составить уравнение плоскости, образованной тремя точками. Координаты узлов каждого браша получал решением системы из трех уравнений плоскостей (узлы браша - это ни что иное, как точка пересечения трех плоскостей, граней браша). Если браш - это куб или призма, получим в итоге 6 уравнений плоскостей и 8 точек - узлов. Так вот, если хотя бы одна грань браша не параллельна противоположной грани, то в результате поиска узлов (или комбинаций пересекающихся трех плоскостей) получим "мнимые", несуществующие узлы. Тяжело объяснить, поэтому прикладываю картинку (1.jpg). Поиск таких "мнимых" узлов еще не решен в программе. Думаю искать их по признаку - на прямой, проходящей через 2 узла браша, не может быть третьего узла, т.е. не должно быть так, что 3 узла лежат на одной прямой. Решу эту задачу, потом займусь самым сложным - проверкой пересечения брашей.
0
|
|
| 07.07.2010, 02:28 | |
|
Помогаю со студенческими работами здесь
6
пересечение отрезков в пространстве Расчет столкновения двух тел в космическом пространстве с# / c++ Пересечение двух векторов в пространстве Даны объемы и массы двух тел из разных материалов. Материал какого из тел имеет большую плотность?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|