Объединение многоугольников
Вложений: 2
Что-то типа программы для черчения. На рисунке 2 нарисован план дома, стены состоят из прямоугольников, каждый прямоугольник можно выделить отдельно и отредактировать(толщина стен и т.п.), при продолжении стены на стыне отображаются грани соседнего прямоугольника( на рисунке будет понятнее в красных кружках) . Ну и собственно вопрос как нарисовать план дома чтоб стены были как на рисунке 1, без перегородок при стыке. Может есть идеи, алгоритм?
|
Ответ: Объединение многоугольников
Как то так: Сначала расставить/настроить все прямоугольники, а потом создать из них картинку где участок на котором лежит прямоугольник не прозрачный, а пространство самой комнаты прозрачное и сверху наложить другую картинку с диагональными линиями.
Но в Блитз3д стандартные картинки не поддерживают прозрачность так что надо подключать FastLibs. |
Ответ: Объединение многоугольников
Так наверно можно, но должен быть способ полегче, например в 3d редакторах можно объединить несколько наложенных друг на друга плоских полигонов(многоугольников) в один, рассчитываются точки пересечения, внутренняя часть отбрасывается, а внешний контур остаётся. Смотрел алгоритмы оверлея многоугольников, так там то они либо не должны самопересекаться, с дырками или без, ещё всякие условия, не сильно разобрался в этом. Ну как-то так?
|
Ответ: Объединение многоугольников
Вложений: 1
вот так
боковые и нижние фейсы можно убрать |
Ответ: Объединение многоугольников
Mr_F_ , как мне получить результат как на твоей картинке (top view), я хочу попробывать реализовать это всё в 2d (если смогу:) конечно), без применения 3d, только пока не соображу путь к решению. Думаю создать тип каждого прямоугольника со своими параметрами(координаты, размеры), присоединить с привязкой стены друг к другу думаю могу, а если стенку будут пересекать много остальных и вдоль и поперёк немогу ничего придумать. коряво выложил мысли:)
|
Ответ: Объединение многоугольников
2D оно в блице медленное все равно, а со всякими трюками будет ещё медленнее, юзай ортографик 3D.
|
Ответ: Объединение многоугольников
Ортографик 3d -это как? А на счёт скорости - не главное, мне понять бы принцип как сделать , подскажите только), а дальше дело пойдёт легче
|
Ответ: Объединение многоугольников
это 3д и камера в ортографическом режиме (без перспективы)
|
Ответ: Объединение многоугольников
делать программу для 2d черчения через 3d наверно не совсем правильно, хотя может ошибаюсь, но вопрос остаётся в силе, как в blitz3d или pure basic(любой язык подойдёт с моим примером ) объединить многоугольники
|
Ответ: Объединение многоугольников
стена => четыре линии
=>линия => массив отрезков проверяем пересечение отрезка линии проходящей посередине каждого участка стены с каждой линией из текущего куска стены, если есть точка пересечения, то находим область пересечения и меняем массив отрезков рисующих эту линию текущего участка стену на такой в котором на месте пересечения линии не будет и т.д. как-то так |
Ответ: Объединение многоугольников
Примерно так?
type прямоугольник: - стена состоит из 4 стен независимых отрезков 1---x1(1000)-координата х 1го отрезка y1(1000)-координата y 1го отрезка 2---x2(1000)-координата х 2го отрезка y2(1000)-координата y 2го отрезка 3---x3(1000)-координата х 3го отрезка y3(1000)-координата y 3го отрезка 4---x4(1000)-координата х 4го отрезка y4(1000)-координата y 4го отрезка каждый отрезок может состоять из 1000 маленьких начало 1го отрезка будет x1(n),y1(n) а конец x1(n+1),y1(n+1) затем проверяем пересекает ли 1й отрезок 2й прямоугольник: -если пересекает линию 2го значит перестаём рисовать, проверяем дальше если опять пересекает линию 2го, начинаем рисовать Написал вроде правильно но непонятно В массиве первые будут стоять полные длины отрезков чтоб сравнивать границы до куда рисовать эти сран...е кусочки, чёта совсем запутался( |
Ответ: Объединение многоугольников
есть массив отрезков у тебя. есть отрезок в котором не должно быть линий.
для каждого из отрезков в массиве смотришь. попадает ли он в тот отрезок в котором не должно его быть: если попал то соответственно текущий отрезок либо совсем исчезает, либо становится короче либо бьется на два отрезка. соответственно в результате либо удаляем элемент из массива, либо меняем, либо меняем и добавляем. вроде довольно просто. |
Ответ: Объединение многоугольников
Делаешь как Mr_F_ предложил, но в 2д - рисуешь чёрные прямоугольники (заполненные внутри), потом чуть потоньше белые
|
Ответ: Объединение многоугольников
Нифига себе идея: рисую вначале все прямоугольники полностью черные и заполненые чёрным цветом, потом по тем же координатам прямоугольники белые и заполненые белым цветом? фиг бы догадался:super: Белые прямоугольники рисовать с небольшим смещением и меньшим размером, чем будут они тоньше, тем толще будет линия обводки (толщина линий окантовки). Я правильно понял?
|
Часовой пояс GMT +4, время: 14:38. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot