| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Проверка координат |
| Автор: Gtaman 9.9.2006, 09:57 | ||
| Итак, проблема следующая: условно есть некое пространство и записи в 2х таблицах, с использованием его координат. тоесть, к примеру пространтво X = 200; Y = 200;, а в тех двух таблицах структура которых имеет вид x1; x2; y1; y2; так вот например в каждой таблице есть записи: The first table _____________ x1 | x2 | y1 | y2 --------------------- 3 | 6 | 3 | 6 _____________ The second table _____________ x1 | x2 | y1 | y2 --------------------- 5 | 7 | 9 | 11 _____________ и нужна проверка чтобы при добавлении записи в the first table координаты высчитались так, чтобы "вокруг" этих координат было как минимум 2 свободные координаты..... я делаю так, но у меня не получаеться..... в лучшем случае, происходит "наползание" координат, т.е. свободных координат не 2, а (-1)
|
| Автор: Gtaman 10.9.2006, 11:13 |
| Кто нибудь может мне помочь? |
| Автор: skyboy 10.9.2006, 11:27 |
| поясни, чтоб понятно было. только тебе известно, зачем ты делаешь то, что делаешь. а объясняешь так, как будто это даже детям известно. подробнее, подробнее... |
| Автор: Gtaman 10.9.2006, 12:05 |
| Это как бы графическая карта для онлайн игры..... координаты соответственно нужны для того чтобы все объекты, которые в этих таблицах отображались соотвественно ихним координатам. Кстати, если такой вариант, с 4 координатами(x1(левый верхний угол);x2(правый верхний угол);y1(левый верхний угол);y2(правый нижний угол);) нецелесообразен, то с удовольствием рассмотрю вариант с двумя координатами, x;y; при обозначении их центром объекта..... |
| Автор: Vaulter 10.9.2006, 13:55 |
| Gtaman, хех! а тебе 2 клетки зачем от краев карты??? правила такие? |
| Автор: Gtaman 11.9.2006, 10:38 | ||||||
Затем что в этих двух таблицах находяться совершенно разные объекты. Тоесть, в first храняться здания, а в second - деревья, камни.... вобщем, препятствия.
Не мог бы ты записать это в коде? Или следующий вариант.
Объекты все квадратные. Т.е. длина и ширина у них одинаковы.
Да, такие правила. Между любыми объектами должно быть 2 клетки промежутка.исключение - объекты second, так как как я уже сказал выше - это деревья, камни, итп..... и для упрощения их размещения думаю лучше сделать "большой" квадрат и по краям уже квадратиков понаставить,, чтоб все было более красиво. Забыл добавить, second как исключение действует только в отношении second, минимальное расстояние first от second должно быть 2 клетки. |
| Автор: Gtaman 12.9.2006, 15:34 |
| У меня все еще не получаеться...... |
| Автор: ewolf 12.9.2006, 20:25 | ||
| Не лучше ли хранить координаты объектов в одной базе, просто ввести еще дополнительное поле для хранения типа объекта в данной области? Дальше, если в дальнейшем все-таки планируется размещение объектов с разной длиной и шириной, то базу лучше оставить как есть, если же всегда объекты будут одинаковы, то лучше ввести сетку, где для каждой ячейки хранить объект. Не вдавая в детали размещения объектов на карте, я думаю, что проверку возможности размещения объекта в области (x,y)(x2,y2) можно записать так (алгоритм пересечения двух прямоугольников):
|
| Автор: Gtaman 13.9.2006, 10:23 | ||||
Нет, я же выше писал, почему. одно дело строения, где каждое строение имеет уникальный ID, а в другой таблице всякие препятствия, деревья, камни итп....
Пока разные величины не планируються, чтобы ширина была 4, а длина 8. Т.е. когда добавляешь строения, указываеться площадь, например, 4. и будет ширина - 4, длина - 4. можно указать 4, 8, 15, 16, 23, 42 итд..... Насчет кода: Не мог бы ты, или кто нибудь еще поподробнее и с проверкой из двух таблиц написать? |
| Автор: vasac 13.9.2006, 11:01 | ||
|
| Автор: Gtaman 13.9.2006, 11:45 | ||
vasac, что то я ничего не понял
но что за первая и вторая области? откуда они? и что за цифры в 1 и 2 массивах? тоже, откуда эти цифры? |
| Автор: Gtaman 14.9.2006, 12:02 |
| Мне срочно нужно! Help me, please! |
| Автор: ewolf 15.9.2006, 01:27 | ||||
Ну и с двумя таблицами несложно, вот например:
|
| Автор: Gtaman 15.9.2006, 14:48 |
| ewolf, фигурные скобки даже phpmyadmin ругает |
| Автор: ewolf 15.9.2006, 18:42 | ||
| Зачем вставлять фигурные скобки в phpmyadmin? они служат только для вставки переменных в строки php, это называется сложный синтаксис, хотя, можно конечно и без них. Greatest выбирает наибольшее значение из 2х.. Вообще, извини, изначально в коде была ошибка Правильно вот так (хотя не имея реальной базы - не проверял)
|
| Автор: Gtaman 20.9.2006, 12:51 |
| ewolf, с кодом вроде все понятно, но не мог бы ты написать полный вариант, т.е. начиная с for? А то я вставлять пробовал полюбому, не получаеться |
| Автор: ewolf 21.9.2006, 19:18 | ||
Ну, я вообще если речь идет о поиске свободной позиции для вставки объекта размерами WxH, то есть конечно более оптимальные алгоритмы, но попробуем обойтись вышеприведенной функцией
Я не уверен, что правильно понял твою идею для формирования карты. Может быть тебе нужна какая-то случайно создаваемая карта? Тогда поищи в интернете алгоритмы формирования случайных графов, карт и т.п. Они не имеют отношения к php или какому-то другому языку программирования, но ты сможешь почерпнуть от туда немало полезных знаний |
| Автор: Gtaman 21.9.2006, 19:54 |
| ewolf, ну идея формирования простая - есть карта, 200*200 клеток. На этих клетках расположены разные объекты, как я уже говорил - здания и камни. при добавлении объекта - минимальное расстояние его от любого объекта должно быть 2 клетки. Ширина и высота зданий - одинакова(всмысле, у каждого экзэмпляра можетбыть разная длина, но если ширина 5, то и высота 5). Камни - тут по другому, тут уже ставиться радиус. т.е. сам объект имеет площадь 1 клетка, но если к примеру поставить у него x1 = 3; x2 = 6; y1 = 3; y2 = 5; то это как бы один объект, но в графическом варианте должно отображаться 6 объектов. я подумал, так будет лучше, чтобы не загружать базу. Экономнее так. Что кавсается твоего кода - сейчас попробую, может быть получиться. |
| Автор: Gtaman 24.9.2006, 09:39 | ||
Вроде все работает как надо...... Если что то не так будет - напишу...... Кстати, в WHERE надо ставить еще и =, т.е.
А вот схемка. Это я написал для более простого наблюдения. Пришлось сделать 25 клеток, так как при 200 очень все тормозит. Сам скрипт тормозит и вывод таблицы в браузер.... так вот, не заполненые цветом ячейки - свободные, желтые - здания, зеленые - лес, камни и.т.д. |