Форум программистов, компьютерный форум, киберфорум
Геометрия
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2010, 09:14
Ответы с готовыми решениями:

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

Вращения платоновых тел в 3х мерном пространстве
Добрый день, уважаемые форумчане, помогите, пожалуйста, разобраться с задачей. Вопрос следующий: необходимо посчитать для всех 5...

Пересечение отрезков в пространстве
есть 2 отрезка в 3D пространстве с координатами точек A(x1,y1,z1)B(x2,y2,z2) и A1(x3,y3,z3)B2(x4,y4,z4), как узнать пересекаются ли...

5
Эксперт С++
 Аватар для Хохол
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
 Аватар для GDimon
25 / 25 / 0
Регистрация: 13.12.2009
Сообщений: 81
06.07.2010, 23:40
Смотри что есть у меня может поможет!!Вот сама тема с заданием https://www.cyberforum.ru/orde... 38869.html и кидаю прогу как мне это реализовали, может поможет что то.....
P.S. ______________________________________
Не забываем про поднятие репутации!!
Вложения
Тип файла: rar main1.rar (1.5 Кб, 42 просмотров)
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.07.2010, 02:28
Помогаю со студенческими работами здесь

пересечение отрезков в пространстве
Добрый день,помоги с написанием формулы или подпрограммы для проверки на пересечение отрезков(задаются 2 точками(x,y,z координатами))

Расчет столкновения двух тел в космическом пространстве
Пишу компьютерную игру, застрял с расчетом столкновений. Условия столкновения - космическое пространство. Дано: метеорит 1 и метеорит...

с# / c++ Пересечение двух векторов в пространстве
Здравствуйте, нужна помощь в данной программе, целый день потратил чтобы разобраться в формулах, но ничего в них не понял, может у кого...

Даны объемы и массы двух тел из разных материалов. Материал какого из тел имеет большую плотность?
Даны объемы и массы двух тел из разных материалов. Материал какого из тел имеет большую плотность?

Разработка игр. Взаимодействие тел в 2D пространстве
Изучаю взаимодействие тел в 2D пространстве и столкнулся с проблемой. Перерыл весь интернет, размышлял, но не смог понять какую именно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
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, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru