Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Точка в фигуре 
:(
    Опции темы
vasisualiiL
Дата 25.10.2006, 06:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня на форме нарисованна фигура из множества точек. Когда я кликаю мышкой, как мне определить
попал я внутрь фигруы или нет? Подскажите пожалуйста... smile 
PM MAIL   Вверх
Romikgy
Дата 25.10.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



а что за фигура?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alexeis
Дата 25.10.2006, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Для этого можно воспользоваться возможностями винды.
1) Создается регион, например полигональный (по точкам периметра) или из квадратов (сканируя по строкам) 
Функции CreatePolygonRgnCreatePolyPolygonRgnCreateRectRgnCombineRgn
2) Проверяем попадание в заданный регион точки PtInRegion 

Более подробно о этих функциях можно узнать в MSDN в разделе "Region Functions" (Windows GDI)

Добавлено @ 09:19 
У меня был где-то даже код создания такого региона по битмапу (задается цвет прозрачности и все что другого цвета становится регионом)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
vasisualiiL
Дата 25.10.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Фигура может быть любой произвольной формы, и с любым количетсвом точек(узлов?), но тут задача по-моему усложнилась: не просто тыкнуть мышкой, а  и просто по координатам точки узнать входит ли она в заданную фигуру smile 
PM MAIL   Вверх
vasisualiiL
Дата 25.10.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



и еще хуже smile по-моему придется обойтись без winapi smile 
PM MAIL   Вверх
Alexeis
Дата 25.10.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(vasisualiiL @  25.10.2006,  10:11 Найти цитируемый пост)
по-моему придется обойтись без winapi 

Это как  smile  под Kylix?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
vasisualiiL
Дата 25.10.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Угу и под него то же.

Добавлено @ 11:09 
А вообще с Kylix ещё вопрос, просто это надо решить по разным причинам без winapi smile 
PM MAIL   Вверх
Alexeis
Дата 25.10.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Тогда нужно заносить точки периметра каждого блока в матрицу
Например если картинка такая
--------------------------------------------------------------
|12345678901234567890123456789012345678|
|-------------------------------------------------------------|
|00000000000111111100000011111111100000|
|00000000011110001111110000001111111111|
|00000000000111111100000000111000000000|
---------------------------------------------------------------
например 
первая строка будет иметь значения (12,18)(25,33)
Вторая строка будет иметь значения (10, 13)(17,22)(29,38)
Третья строка будет иметь значения (12, 18)(27,29)
Если у нас точка скажем (1, 19), то мы выбираем первую строку и проверяем, попало ли значение 19 - в один из указанных диапазонов. В данном случае 19 > 18 > 12 и 19 < 25 < 33, т.е. не попало ни в один из диапазонов. Можно сделать свою структуру 
1) число диапазонов
2) второе динамический массив диапазонов.

Т.о. Получим для каждой строки по одной такой структуре. 



Это сообщение отредактировал(а) alexeis1 - 25.10.2006, 11:23


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rodman
Дата 25.10.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Ну ты же ее по координатам формируешь (если она у тебя из точек состоит)

нельзя что ли обрабатывать OnMouseDown и по координатам сравнивать???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
maxim1000
Дата 25.10.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 1
Всего: 110



первый вопрос, без прояснения которого нормально и обсудить-то не получится:
как задана фигура?
1. используется ли информация с Canvas формы?
2. или есть какое-то внутреннее представление?
в первом случае GetPixel
во втором - зависит от способа задания фигуры


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


Новичок



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

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



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

Добавлено @ 12:01 
Цитата(alexeis1 @  25.10.2006,  11:21 Найти цитируемый пост)
Тогда нужно заносить точки периметра каждого блока в матрицу
Например если картинка такая
 и т.д.

К своему стыду ничего не понял smile  smile 

PM MAIL   Вверх
Alexeis
Дата 25.10.2006, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



vasisualiiL, Фигура односвязная или многосвязная (целая или из кусков)? Есть ли пустоты?

Добавлено @ 12:08 
Цитата(vasisualiiL @  25.10.2006,  11:59 Найти цитируемый пост)
К своему стыду ничего не понял

Такое представление удобно если картинка задана битмапом. Единицы - это то что внутри области нули все что снаружи. Один диапазон это фрагмент (часть строки) состоящий из одних только единиц. Задается он по Х координате (начало, конец) по Y координате определяется номер строки.
Таким образом если начало<X<конец - то точка внутри фигуры иначе она либо в другом диапазоне этой же строки или вне фигуры.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
vasisualiiL
Дата 25.10.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Фигура целая, просто замкнутый контур.
готов выложить маленький рисунок, но не знаю как... smile 
PM MAIL   Вверх
Rodman
Дата 25.10.2006, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

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



Когда пишешь сообщение внизу можно прикрепить файл... так и кинь
PM MAIL WWW Skype GTalk YIM MSN   Вверх
vasisualiiL
Дата 25.10.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот примерно так smile 
Маленько грубовато... но принцип понятен

Присоединённый файл ( Кол-во скачиваний: 16 )
Присоединённый файл  primer.jpg 3,64 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


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

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


 




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


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

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