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

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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
24
Опять-же, проверка по ячейкам проще будет, чем возня с ректами.
Добавляем через RegionAddCell(region,x,y) в цикле, а проверка циклами по координатам со смещением на размер ячейки.
Размер ячейки то ли 32 то ли 16, я точно не помню, но суть в том, что регионы работают на основе ячеек фиксированного размера.
27
prog, 32х32 миним размер ячейки (достаточно 1 точки)
кстати есть проблема из-за общих ячеек, один раз сильно из-за них лоханулся
Загруженные файлы
24
Steal nerves, а такая ситуация точно возможна? мне казалось что ячейки регионов совпадают с минимальной сеткой.
И по размеру и по координатам.
Я просто помню что у меня были похожие проблемы пока я не выверил все смещения, чтобы края попадали в правильные ячейки, но после установки правильных смещений все вроде начало работать идеально.
27
prog, ну понимаешь, код проверял соседние точки. и получалось что точки ближе находились к центру чем должны были. а оказалось что мб "общие точки", одни и те же могут занять одну и ту точку. я так ругался
24
Steal nerves, не должно такого быть, если все координаты приводить к кратным размеру ячейки и брать смещение на половину размера ячейки чтобы попадать в центр ячейки, а потом брать смещения на размер ячейки для перебора.
27
все дописал свою наработку. сам дорабатывать буду.
недостаток с регионом
обнаружил пару месяцев назад еще один недостаток: это все же добавления ректа в регион. эта сама нативка
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) не существует
Загруженные файлы
27
Ладно. Открываю вопрос заново. Тк работает не очень хорошо (см. пример карты ). В принципе работает все хорошо, но изредко багуется. Не знаю почему.
большая картинка
Как это можно проверить то?
Загруженные файлы
16
дебагом и глобальным счетчиком выводишь, какой № квадрата подцепил в этом цикле, и смотришь
либо после выполнения цикла выводишь "успешно"
18
Вам это нужно только чтобы сделать новый тип проходимости для строительства зданий?
27
DracoL1ch, оно почему-то зацикливается. Короче проблема в loop, не может выйти из цикла. Насчитывает счетчик за 590. Какие то проверки не работают значит. Переделать надо тут. Неизвестно почему, это невидимое. Наверн дело в регионе. Баг работает единожды в едином случае. Этот участок не успевает поделиться и добавиться. Если забить на это, и купить участок в другом месте. Потом там же работает нормально.
Vlod, да. не только это.
возможно и есть решения и проще.
эх. как это объяснить.
короче идея в том, чтобы можно было покупать участки земель. каждый игрок может иметь по несколько регионов, а мб и более десятки регионов.
регионы привязываются к определенным главным зданиям: хижина старейшины - деревня фермера, рядом с морем можно переделать в рыбацкую деревню, или деревню лесорубов
крепость - форпост у границы,
шахта - горнодобывающее поселение
когда заканчивается строительство, то дается начальный прямоугольный участок. Участок главного здания мб измениться, если рядом рядом участок принадлежит другому региону. Главные здания не должны строится близ друг друга, у них есть определенный радиус для развития.
На этом регионе проще отследить: строительство, заход противника, ии
эти регионы можно развивать, они могут разрастаться. То есть можно было бы покупать землю через меню главного здания. То есть там обычная игрушечная ферма, пустышка-здание с эффектом москитов, чтобы можно было ставить не только на свободный участок для стройки, но и на месте клифов, море и пр.
Решил я поделить на прямоугольные участки. Так как легче добавлять в регионы. Но этим есть проблемы, может лишнее добавлять. Также поделив на ректы, можно еще подсчитать площадь участка. Кстати у меня это идеально работает деление. С этим проблем нет. Есть другое, это система не работает как часы
кстати пробовал вместо регионов массив вершин ректов юзать. Но пока что это в зачатке находится. Написал пока не рабочий кож
18
Почему не подходит способ: поделить пространство на минимальные квадраты и помечать занятые?
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.