Поиск:

Ответ в темуСоздание новой темы Создание опроса
> z-order графических фигур, его хранение-изменение, быстрое определение самой верхней фигуры 
:(
    Опции темы
KasMP
Дата 26.8.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Здравствуйте, единственные и неповторимые винградовцы smile !

Думаю, из названия темы суть вопроса ясна: есть графические фигуры, определенным образом расположенные на полотне, и, соответственно, определенным образом накладывающиеся друг на друга; какие способы хранения порядка наложения существуют? желательно, (очень) простые в реализации
Возможность быстро узнать, какая фигура самая верхняя и находится ли что-то еще под некоторой фигурой, очень критична.

Сначала я думала, что незачем раздувать из этого проблему, мудрить что-то с бинарными деревьями или еще с чем-то, что в действительности все намного проще... Создаем булевскую матрицу NxN (N - кол-во фигур) и заполняем ее по простому правилу: a[i][j] = {фигура с номером i лежит над фигурой с номером j}. Можно урезать матрицу до треугольного вида, исключив и главную диагональ.
Вобщем я была в восторге от своей идеи - все очень просто, доступно, информативно и экономично; изменение порядка фигур - вообще раз плюнуть. Эта простота стала настораживать меня, но я не нашла подвох... И вот только в самый последний момент меня осенило, что при таком хранении порядка наложения потребуется много вычислений для того, чтобы узнать, какая фигура лежит выше всех, какая - вторая и т.п..

Я поняла, для  чего нужно бинарное дерево! Вернее, поняла только отчасти... У него по крайней мере есть голова - понятно, откуда все начинается и что сверху...
Но как именно его строить, чтобы можно было отразить все тонкости и нюансы порядка наложения (как в моей матрице)? Изменение порядка, конечно, не потребует гигантских усилий, но все равно помудрить придется...

Какие еще есть способы?

P.S.. Вы просто не представляете, как благодарна я буду smile ...
PM MAIL   Вверх
cardinal
Дата 26.8.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(KasMP @  26.8.2009,  18:06 Найти цитируемый пост)
Какие еще есть способы?

Я не очень внимательно прочитал твое сообщение, так что если что... smile 

Вообщем другой способ - это в структуре объекта предусмотреть две спец. точки - самая близкая и самая дальняя. И будет тебе быстрое определение самой верхней фигуры (просто перебрал все эти точки всех фигур)...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Pavia
Дата 27.8.2009, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Достаточно обыкновенного списка. Номер по порядку соответсвует z позиции. Перемещать очень легко просто меняешь элементы списка местами. Элеметами списка являются описание фигуры и ссылки на предыдущий и следующий элемент списка.

Добавлено через 3 минуты и 27 секунд
Цитата(KasMP @  26.8.2009,  20:06 Найти цитируемый пост)
Возможность быстро узнать, какая фигура самая верхняя и находится ли что-то еще под некоторой фигурой, очень критична.

Это уже другая задача.  Если объктов немного то можно перебором.  А для ускорения используй квадра деревья.
PM MAIL   Вверх
Earnest
Дата 27.8.2009, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



KasMP, насколько я помню твои предыдущие посты, у тебя фигур раз два и обчелся (несколько десятков). При таком количестве нужно использовать самые простые способы - линейный список Z-order, как уже сказано, и простой перебор для определения перекрытия фигур.


--------------------
...
PM   Вверх
KasMP
Дата 27.8.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(cardinal @  26.8.2009,  20:18 Найти цитируемый пост)
в структуре объекта предусмотреть две спец. точки - самая близкая и самая дальняя

Самая близкая и дальняя по отношению к чему? от чего smile ?
Цитата(Pavia @  27.8.2009,  00:15 Найти цитируемый пост)
Достаточно обыкновенного списка.

Благодарю smile.
А линейный список правда способен отразить все нюансы наложения? Фигуры могут накладываться самым причудливым образом, а в списке нет возможности сделать что-то типа ответвления.
Цитата(Earnest @  27.8.2009,  07:23 Найти цитируемый пост)
KasMP, насколько я помню твои предыдущие посты, у тебя фигур раз два и обчелся (несколько десятков)

Какая ты внимательная smile . Да, их совсем-совсем мало.
Цитата(Earnest @  27.8.2009,  07:23 Найти цитируемый пост)
При таком количестве нужно использовать самые простые способы - линейный список Z-order

Подумаю над тем, как список способен передать все-все тонкости порядка...
Цитата(Earnest @  27.8.2009,  07:23 Найти цитируемый пост)
и простой перебор для определения перекрытия фигур

Пусть будет так. Думаю, это вполне приемлемо. Спасибо большое за советы smile .

Добавлено через 2 минуты и 40 секунд
Хотя если вдуматься, то как бы причудливо не пересекались фигуры друг с другом, они все равно линейны по вертикали: если фигура1 лежит под фигурой2, то фигуры, которые под фигурой1, не могут оказаться над фигурой2, а фигуры, которые над фигурой2, не могут лежать над1.

Добавлено через 7 минут и 32 секунды
И все-таки меня смущает, например, такое наложение:
user posted image

Как оно будет представлено в списке? Он будет кольцевым?
Вдруг создадутся дополнительные сложности?
PM MAIL   Вверх
cardinal
Дата 27.8.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(KasMP @  27.8.2009,  14:45 Найти цитируемый пост)
Самая близкая и дальняя по отношению к чему? от чего smile ?

Относительно нуля (центр системы координат).


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Earnest
Дата 28.8.2009, 07:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Цитата(KasMP @  27.8.2009,  17:45 Найти цитируемый пост)
 все-таки меня смущает, например, такое наложение:

Ой! Такое у тебя может быть? Список этого, действительно, не предусматривает... Что за задача, где такая конфигурация возникает? Обычно фигуры предполагаются плоскими, а плоскости так переплестись не могут...

Добавлено через 1 минуту и 23 секунды
Можно попробовать заменить список графом, где связь будет между соседними по Z-порядку объектами. Но сначала хорошенько подумай - так действительно может быть?


--------------------
...
PM   Вверх
KasMP
Дата 28.8.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(cardinal @  27.8.2009,  18:04 Найти цитируемый пост)
Относительно нуля (центр системы координат). 

Здесь возникает 2 вопроса:
1) нужно уметь находить эти точки для фигур любой формы;
2) как это поможет узнать, какая фигура над какой лежит?
(скажем, есть точки b1 и d1, b2 и d2 (ближние и дальние точки двух фигур); какими бы не были эти числа, фигуры могут перекрываться в любом порядке - хоть 1 над 2, хоть 2 над 1)

Earnest, ты мне очень помогла smile .
У меня были точно такие же мысли про плоскости и т.п., но я не была в них уверена и запостила такое "провокационное" наложение. Теперь я точно знаю, что все верно smile .

Цитата(Earnest @  28.8.2009,  07:45 Найти цитируемый пост)
Можно попробовать заменить список графом, где связь будет между соседними по Z-порядку объектами.

Ты имеешь в виду что-то типа этого?
user posted image
PM MAIL   Вверх
KasMP
Дата 28.8.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Вобщем список мне вполне подходит smile.

Только делать я буду не список, а массив:
  • для сути задачи разницы нет: объекты упорядочены линейно, можем бегать в обе стороны, знаем начало и конец;
  • памяти займет не больше (не нужно хранить указатели), работать будет не медленнее (в соседнюю ячейку бежать все-таки проще, чем по указателю бог знает куда);
  • одна из немногих положительных черт списка не нужна даром:  фигур как было n штук в начале, так и будет до конца программы - изменять кол-во элементов хранилища z-order не потребуется;
  • к моменту создания хранилища я уже знаю, сколько фигур будет;
  • мне приятнее и комфортнее: не надо следить, кто куда смотрит; бегать проще; для изменения порядка нужно несколько элементарных строчек;
  • ну не люблю я списки!!!!!!!!
От всей души благодарю любимых винградовцев, участвовавших в этой теме smile .
PM MAIL   Вверх
cardinal
Дата 28.8.2009, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Цитата(KasMP @  28.8.2009,  09:15 Найти цитируемый пост)
Здесь возникает 2 вопроса:

В названии темы написано только, что "нужно быстро найти самую верхнюю фигуру". Если есть самые близкие точки (к наблюдателю) от всех объектов, то это проблема решается перебором этих точек.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
KasMP
Дата 29.8.2009, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(KasMP @  28.8.2009,  11:43 Найти цитируемый пост)
Только делать я буду не список, а массив:

Гм, все-таки делать я буду именно список по одной простой причине: очень часто надо будет элемент из середины хранилища перемещать в его начало, что потребует перемещения многих элементов в массиве (а это очень нерационально).

cardinal, спасибо за желание помочь smile smile.
PM MAIL   Вверх
KasMP
Дата 16.10.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(cardinal @  26.8.2009,  20:18 Найти цитируемый пост)
Вообщем другой способ - это в структуре объекта предусмотреть две спец. точки - самая близкая и самая дальняя. И будет тебе быстрое определение самой верхней фигуры (просто перебрал все эти точки всех фигур)... 

cardinal, пожалуйста, вспомни название этого метода smile ! И тогда я смогу его изучить и буду очень тебе благодарна smile smile.
PM MAIL   Вверх
cardinal
Дата 17.10.2009, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Нет у него названия, это просто моя идея решения проблемы..


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
KasMP
Дата 18.10.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: нет
Всего: 30



Цитата(cardinal @  17.10.2009,  01:09 Найти цитируемый пост)
Нет у него названия, это просто моя идея решения проблемы.. 

Понятно smile .
Но вообще название у него есть smile . Судя по всему, оно какое-то дурацкое, потому что никто не может его вспомнить smile smile .
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.