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

Принятый ответ

Вот конечный вариант. Переделал на хэш-таблицу
Исправил многие подвисы - большая часть которых эта строки. Именно строки вызывают подвисы. Они не только в дебагах, но в ExecuteFunc, строковое название молнии и пр. И теперь молнии могу миллиардами создавать без проблем. Я тексты строк все сохранил в бд. Без этого почему у юнитов анимация ходьбы поддергивалась.
Теперь все работает как надо и как часики. Единственная зараза - когда строю несколько деревней, потом вылетает чего-то с критом. Но это происходит очень и очень редко. где-то с шансом 0.05%. Возможно либо работаю с несуществующими объектами либо пытаюсь выгрузить из хэша не существующие данные. У вара какие то проблемы.
Пробовал вставить проверки GetHandleId(object) > 0 или HaveSavedReal или HaveSavedHandle - теперь сохранять карту не хочет. Пробую снова написать код

Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
24
5 лет назад
Отредактирован prog
0
Steal nerves, можно ли двигать это не главное - подходит ли тебе этот вариант с добавлением ректа в регион в слепую или есть какие-то не озвученые условия которые не позволяют так делать?
0
27
5 лет назад
0
prog, я раньше так делал (я себе немного усложнил задачу). есть условия. например, участок мб занят другим игроком. или мб одна часть занята одним игроком, другая часть другим. я уже реализовал эту идею.
Загруженные файлы
0
24
5 лет назад
0
Steal nerves, как по мне, в таком случае проще проверять по ячейкам из которых собирается регион, чем возиться с ректами и их разбиением.
0
27
5 лет назад
0
второе условие - то что покупаемый участок должен контачится с территорией вашей деревни. Иначе смысл пропадет, тогда придеться ему строить вторую деревню.
prog, а как это сделать
0
24
5 лет назад
Отредактирован prog
0
Опять-же, проверка по ячейкам проще будет, чем возня с ректами.
Добавляем через RegionAddCell(region,x,y) в цикле, а проверка циклами по координатам со смещением на размер ячейки.
Размер ячейки то ли 32 то ли 16, я точно не помню, но суть в том, что регионы работают на основе ячеек фиксированного размера.
1
27
5 лет назад
Отредактирован MpW
1
prog, 32х32 миним размер ячейки (достаточно 1 точки)
кстати есть проблема из-за общих ячеек, один раз сильно из-за них лоханулся
Загруженные файлы
0
24
5 лет назад
Отредактирован prog
0
Steal nerves, а такая ситуация точно возможна? мне казалось что ячейки регионов совпадают с минимальной сеткой.
И по размеру и по координатам.
Я просто помню что у меня были похожие проблемы пока я не выверил все смещения, чтобы края попадали в правильные ячейки, но после установки правильных смещений все вроде начало работать идеально.
0
27
5 лет назад
0
prog, ну понимаешь, код проверял соседние точки. и получалось что точки ближе находились к центру чем должны были. а оказалось что мб "общие точки", одни и те же могут занять одну и ту точку. я так ругался
0
24
5 лет назад
0
Steal nerves, не должно такого быть, если все координаты приводить к кратным размеру ячейки и брать смещение на половину размера ячейки чтобы попадать в центр ячейки, а потом брать смещения на размер ячейки для перебора.
0
27
4 года назад
Отредактирован MpW
0
все дописал свою наработку. сам дорабатывать буду.
недостаток с регионом
обнаружил пару месяцев назад еще один недостаток: это все же добавления ректа в регион. эта сама нативка
native RegionAddRect takes region whichRegion, rect r returns nothing
есть добавить рект с вершинами (minx=0, miny=0,maxx=32.,maxy=32). То рект он добавляет с размерами (minx=0,miny=0,maxx=64.,maxy=64). Короче берет ближайшую координату кратно числу 32. Если взять число 64, то вставит 96. Если 96, то 128. Пробовал меньше 31, подправляет на 32. В нативке RegionAddRect специально убавлять пришлось maxx-32, maxy-32. Тогда не работает норм проверка IsPointInRegion, точки (32. , 32.) не существует. Здесь скажет что IsPointInRegion(maxx,maxy) не существует
Загруженные файлы
0
27
4 года назад
Отредактирован MpW
0
Ладно. Открываю вопрос заново. Тк работает не очень хорошо (см. пример карты ). В принципе работает все хорошо, но изредко багуется. Не знаю почему.
большая картинка
Как это можно проверить то?
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.