как разбить фигуры на прямоугольники?
У меня такой вопрос как разбить фигуры на прямоугольники?
возьмем такую ситуацию, что вам заранее известна форма, и имеются точки. нужно разбить фигуру на прямоугольники (rect), дело в том что саму область-фигуру не добавишь в регион. По любому надо разбивать на ректы. Ими проще проверять лежит ли точка внутри ректа или нет, чем какая то фигура.
Я уже многое сделал, у меня система находит эту фигуру. И надо после разбить на ректы.
Вот пример уже имеются 6 точек p1-p6, могу найти p7-p8. Теперь надо как-то собрать ректы (на глазок понятно что там 3, а то и меньше 2). надо как-то написать алгоритм, что эти отрезки образовали ректы
Фигуры могут быть любой формы
находил такой вопрос вот здесь, но ответа не нашел. алгоритм просто нужен

Без ответа.


Просмотров: 381

Steal nerves #2 - 3 месяца назад (отредактировано ) 0
детерминируются многоугольники
слово не понятное для меня) я не считаю это многоугольником, поэтому и аккуратно назвал "фигурой"

Clamp, циклами)) могу карту скинуть.
  1. строите палатку
  2. выбираете палатку, и пытаетесь через нее построить вагонетки
по идее должно покупать участки
прикреплены файлы
NazarPunk #3 - 3 месяца назад 0

Последний патч вашу карту не читает, так что потестить не получилось.
Clamp #4 - 3 месяца назад 0
слово не понятное для меня
Как эти многоугольники возникают?
Карту не смотрел, на этой машине нет варкрафта.
NazarPunk #5 - 3 месяца назад 0
Каким образом детерминируются многоугольники?
По ссылке в вопросе это уже спрашивали
прикреплены файлы
Steal nerves #7 - 3 месяца назад 0
Вам случайно не задача о принадлежности точки многоугольнику нужна?
не могу сказать, у меня же нет центра, у меня квадратные формы. и выглядит слишком сложно.

NazarPunk, так она у меня на 1.26, и с ошибками. щас новую карту скидываю.
Clamp, щас объясню как
прикреплены файлы
NazarPunk #8 - 3 месяца назад 0
не могу сказать, у меня же нет центра
Центр есть у точки, которая проверяется на принадлежность к многоугольнику. Вам нужно лишь хранить массив рёбер фигуры.
8gabriel8 #9 - 3 месяца назад 0
Steal nerves, странный вопрос, товарищ! Что есть прямоугольник на координатной плоскости? Это 4 точки, у которых лишь по два варианта для X и Y, то есть, перебирая точки в массиве надо сравнивать, например, их X, при совпадении сравнивать их Y с другими точками, а потом у найденных Y опять сравнить X.
P. S. только сверяй, чтобы одинаковые X и Y не были у более двух точек, а то может быть, что это треугольник или линия.
Steal nerves #10 - 3 месяца назад (отредактировано ) 0
NazarPunk, я не понимаю что вы мне скинули. поэтому не могу этой подсказкой воспользоваться
Clamp, ну они циклами проверяют соседние координаты. а это большая работа чтоб объяснить. проще самому под капот заглянуть. есть видос как они создаются.
8gabriel8, я знаю. но есть разные фигуры
прикреплены файлы
8gabriel8 #11 - 3 месяца назад 0
Если имеешь ввиду такие ситуации, когда есть чёрный многоугольник, но в нём по такому принципу считается красный четырёхугольник, который совсем не является частью чёрного многоугольника, то просто проверяй наличие ректа каждые 128 координат между двумя потенциальными точками четырёхугольника.
прикреплены файлы
prog #12 - 3 месяца назад 0
Steal nerves, а обязательно нужно идеальное разбиение или сойдет даже если ректы перекрываться будут?
Ну и, насколько я помню, при добавлении ректов в регион они на самом деле не как ректы добавляются, а разбиваются на маленькие кусочки размером с самую мелкую сетку и можно не париться о пересечении, а сам рект можно даже удалить после добавления в регион и ничего не поменяется.
Steal nerves #13 - 3 месяца назад 0
prog, идеального не обязательно. главное что все вошли. остальное не важно. я эти участки добавлю в регион.
У меня регион помогает при проверке можно строить, покупать, ставить туда. короче все на регион завязано. есть удобная нативка
prog #14 - 3 месяца назад 0
Steal nerves, окей, а зачем тебе тогда разбиение на ректы?
Steal nerves #15 - 3 месяца назад (отредактировано ) 0
prog, ну чтобы ректы добавить в регион. с помощью региона я и проверяю. лежат ли точки, не лежат. типа как новый тип Pathable (их всего 8, но могу доп добавлять еще триггерный аналог). с помощью этой штуки все проверяется. пока мне нравится)
prog #16 - 3 месяца назад 0
Судя по видео, у тебя все добавляемые в регион участки прямоугольные - просто делаем временный рект на весь добавляемый участок, добавляем в регион и удаляем рект (или, если ректы можно двигать, я не помню уже - двигаем один и тот же рект каждый раз в нужное место).
PT153 #17 - 3 месяца назад 0
prog, двигать можно.
NazarPunk #18 - 3 месяца назад 0
Если не нужны события входа/выхода, то можно хранить массив рёбер и не связываться с ректами.
Steal nerves #19 - 3 месяца назад 0
prog, двигать можно.
NazarPunk, пока не нужны
prog #20 - 3 месяца назад (отредактировано ) 0
Steal nerves, можно ли двигать это не главное - подходит ли тебе этот вариант с добавлением ректа в регион в слепую или есть какие-то не озвученые условия которые не позволяют так делать?
Steal nerves #21 - 3 месяца назад 0
prog, я раньше так делал (я себе немного усложнил задачу). есть условия. например, участок мб занят другим игроком. или мб одна часть занята одним игроком, другая часть другим. я уже реализовал эту идею.
прикреплены файлы
prog #22 - 3 месяца назад 0
Steal nerves, как по мне, в таком случае проще проверять по ячейкам из которых собирается регион, чем возиться с ректами и их разбиением.
Steal nerves #23 - 3 месяца назад 0
второе условие - то что покупаемый участок должен контачится с территорией вашей деревни. Иначе смысл пропадет, тогда придеться ему строить вторую деревню.
prog, а как это сделать
prog #24 - 3 месяца назад (отредактировано ) 0
Опять-же, проверка по ячейкам проще будет, чем возня с ректами.
Добавляем через RegionAddCell(region,x,y) в цикле, а проверка циклами по координатам со смещением на размер ячейки.
Размер ячейки то ли 32 то ли 16, я точно не помню, но суть в том, что регионы работают на основе ячеек фиксированного размера.
Steal nerves #25 - 3 месяца назад (отредактировано ) 1
prog, 32х32 миним размер ячейки (достаточно 1 точки)
кстати есть проблема из-за общих ячеек, один раз сильно из-за них лоханулся
прикреплены файлы
prog #26 - 3 месяца назад (отредактировано ) -1
Steal nerves, а такая ситуация точно возможна? мне казалось что ячейки регионов совпадают с минимальной сеткой.
И по размеру и по координатам.
Я просто помню что у меня были похожие проблемы пока я не выверил все смещения, чтобы края попадали в правильные ячейки, но после установки правильных смещений все вроде начало работать идеально.
Steal nerves #27 - 3 месяца назад 0
prog, ну понимаешь, код проверял соседние точки. и получалось что точки ближе находились к центру чем должны были. а оказалось что мб "общие точки", одни и те же могут занять одну и ту точку. я так ругался
prog #28 - 3 месяца назад -1
Steal nerves, не должно такого быть, если все координаты приводить к кратным размеру ячейки и брать смещение на половину размера ячейки чтобы попадать в центр ячейки, а потом брать смещения на размер ячейки для перебора.