![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Итак, проблема следующая:
условно есть некое пространство и записи в 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 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Кто нибудь может мне помочь?
|
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
поясни, чтоб понятно было. только тебе известно, зачем ты делаешь то, что делаешь. а объясняешь так, как будто это даже детям известно. подробнее, подробнее...
|
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Это как бы графическая карта для онлайн игры..... координаты соответственно нужны для того чтобы все объекты, которые в этих таблицах отображались соотвественно ихним координатам.
Кстати, если такой вариант, с 4 координатами(x1(левый верхний угол);x2(правый верхний угол);y1(левый верхний угол);y2(правый нижний угол);) нецелесообразен, то с удовольствием рассмотрю вариант с двумя координатами, x;y; при обозначении их центром объекта..... |
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 3 Всего: 36 |
Gtaman, зачем ты делишь их на 2 таблицы?
Один из вариантов: Прямоугольник области для добавляемого объекта будет (x1-2,y1-2,x2+2,y2+2) Перебираешь все существующие объекты и проверяешь не пересекаются ли они с данной областью.
Если объекты имеют одинаковые размеры, то две координаты центра будут куда более разумным решением. Если разные, то они не помогут. Это сообщение отредактировал(а) vasac - 10.9.2006, 12:27 |
|||
|
||||
| Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: 3 Всего: 22 |
Gtaman, хех! а тебе 2 клетки зачем от краев карты???
правила такие? |
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Затем что в этих двух таблицах находяться совершенно разные объекты. Тоесть, в first храняться здания, а в second - деревья, камни.... вобщем, препятствия. Не мог бы ты записать это в коде? Или следующий вариант. Объекты все квадратные. Т.е. длина и ширина у них одинаковы.
Да, такие правила. Между любыми объектами должно быть 2 клетки промежутка.исключение - объекты second, так как как я уже сказал выше - это деревья, камни, итп..... и для упрощения их размещения думаю лучше сделать "большой" квадрат и по краям уже квадратиков понаставить,, чтоб все было более красиво. Забыл добавить, second как исключение действует только в отношении second, минимальное расстояние first от second должно быть 2 клетки. Это сообщение отредактировал(а) Gtaman - 11.9.2006, 10:40 |
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
У меня все еще не получаеться......
|
|||
|
||||
| ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 2 Всего: 18 |
Не лучше ли хранить координаты объектов в одной базе, просто ввести еще дополнительное поле для хранения типа объекта в данной области?
Дальше, если в дальнейшем все-таки планируется размещение объектов с разной длиной и шириной, то базу лучше оставить как есть, если же всегда объекты будут одинаковы, то лучше ввести сетку, где для каждой ячейки хранить объект. Не вдавая в детали размещения объектов на карте, я думаю, что проверку возможности размещения объекта в области (x,y)(x2,y2) можно записать так (алгоритм пересечения двух прямоугольников):
|
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Нет, я же выше писал, почему. одно дело строения, где каждое строение имеет уникальный ID, а в другой таблице всякие препятствия, деревья, камни итп.... Пока разные величины не планируються, чтобы ширина была 4, а длина 8. Т.е. когда добавляешь строения, указываеться площадь, например, 4. и будет ширина - 4, длина - 4. можно указать 4, 8, 15, 16, 23, 42 итд..... Насчет кода: Не мог бы ты, или кто нибудь еще поподробнее и с проверкой из двух таблиц написать? |
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 3 Всего: 36 |
|
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
vasac, что то я ничего не понял
но что за первая и вторая области? откуда они? и что за цифры в 1 и 2 массивах? тоже, откуда эти цифры? |
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Мне срочно нужно! Help me, please!
|
|||
|
||||
| ewolf |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 2 Всего: 18 |
Ну и с двумя таблицами несложно, вот например:
|
||||
|
|||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
ewolf, фигурные скобки даже phpmyadmin ругает
|
|||
|
||||
| ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 2 Всего: 18 |
Зачем вставлять фигурные скобки в phpmyadmin? они служат только для вставки переменных в строки php, это называется сложный синтаксис, хотя, можно конечно и без них. Greatest выбирает наибольшее значение из 2х..
Вообще, извини, изначально в коде была ошибка Правильно вот так (хотя не имея реальной базы - не проверял)
|
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
ewolf, с кодом вроде все понятно, но не мог бы ты написать полный вариант, т.е. начиная с for? А то я вставлять пробовал полюбому, не получаеться
|
|||
|
||||
| ewolf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 15.8.2006 Где: г. Москва Репутация: 2 Всего: 18 |
Ну, я вообще если речь идет о поиске свободной позиции для вставки объекта размерами WxH, то есть конечно более оптимальные алгоритмы, но попробуем обойтись вышеприведенной функцией
Я не уверен, что правильно понял твою идею для формирования карты. Может быть тебе нужна какая-то случайно создаваемая карта? Тогда поищи в интернете алгоритмы формирования случайных графов, карт и т.п. Они не имеют отношения к php или какому-то другому языку программирования, но ты сможешь почерпнуть от туда немало полезных знаний |
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
ewolf, ну идея формирования простая - есть карта, 200*200 клеток. На этих клетках расположены разные объекты, как я уже говорил - здания и камни. при добавлении объекта - минимальное расстояние его от любого объекта должно быть 2 клетки. Ширина и высота зданий - одинакова(всмысле, у каждого экзэмпляра можетбыть разная длина, но если ширина 5, то и высота 5). Камни - тут по другому, тут уже ставиться радиус. т.е. сам объект имеет площадь 1 клетка, но если к примеру поставить у него x1 = 3; x2 = 6; y1 = 3; y2 = 5; то это как бы один объект, но в графическом варианте должно отображаться 6 объектов. я подумал, так будет лучше, чтобы не загружать базу. Экономнее так.
Что кавсается твоего кода - сейчас попробую, может быть получиться. |
|||
|
||||
| Gtaman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 10.4.2006 Репутация: нет Всего: нет |
Вроде все работает как надо...... Если что то не так будет - напишу...... Кстати, в WHERE надо ставить еще и =, т.е.
А вот схемка. Это я написал для более простого наблюдения. Пришлось сделать 25 клеток, так как при 200 очень все тормозит. Сам скрипт тормозит и вывод таблицы в браузер.... так вот, не заполненые цветом ячейки - свободные, желтые - здания, зеленые - лес, камни и.т.д. Присоединённый файл ( Кол-во скачиваний: 3 )
out_scheme_1.JPG 31,77 Kb |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |