![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
У меня на форме нарисованна фигура из множества точек. Когда я кликаю мышкой, как мне определить
попал я внутрь фигруы или нет? Подскажите пожалуйста... ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
а что за фигура?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Для этого можно воспользоваться возможностями винды.
1) Создается регион, например полигональный (по точкам периметра) или из квадратов (сканируя по строкам) Функции CreatePolygonRgn, CreatePolyPolygonRgn, CreateRectRgn, CombineRgn 2) Проверяем попадание в заданный регион точки PtInRegion Более подробно о этих функциях можно узнать в MSDN в разделе "Region Functions" (Windows GDI) Добавлено @ 09:19 У меня был где-то даже код создания такого региона по битмапу (задается цвет прозрачности и все что другого цвета становится регионом) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Фигура может быть любой произвольной формы, и с любым количетсвом точек(узлов?), но тут задача по-моему усложнилась: не просто тыкнуть мышкой, а и просто по координатам точки узнать входит ли она в заданную фигуру
![]() |
|||
|
||||
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
и еще хуже
![]() ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Угу и под него то же.
Добавлено @ 11:09 А вообще с Kylix ещё вопрос, просто это надо решить по разным причинам без winapi ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 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 вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Rodman |
|
|||
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: нет Всего: 122 |
Ну ты же ее по координатам формируешь (если она у тебя из точек состоит)
нельзя что ли обрабатывать OnMouseDown и по координатам сравнивать??? |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
первый вопрос, без прояснения которого нормально и обсудить-то не получится:
как задана фигура? 1. используется ли информация с Canvas формы? 2. или есть какое-то внутреннее представление? в первом случае GetPixel во втором - зависит от способа задания фигуры -------------------- qqq |
|||
|
||||
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Наверное плохо объяснил ( ну бывает
![]() ![]() ![]() Добавлено @ 12:01
К своему стыду ничего не понял ![]() ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
vasisualiiL, Фигура односвязная или многосвязная (целая или из кусков)? Есть ли пустоты?
Добавлено @ 12:08 Такое представление удобно если картинка задана битмапом. Единицы - это то что внутри области нули все что снаружи. Один диапазон это фрагмент (часть строки) состоящий из одних только единиц. Задается он по Х координате (начало, конец) по Y координате определяется номер строки. Таким образом если начало<X<конец - то точка внутри фигуры иначе она либо в другом диапазоне этой же строки или вне фигуры. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Фигура целая, просто замкнутый контур.
готов выложить маленький рисунок, но не знаю как... ![]() |
|||
|
||||
Rodman |
|
|||
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: нет Всего: 122 |
Когда пишешь сообщение внизу можно прикрепить файл... так и кинь
|
|||
|
||||
vasisualiiL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 25.10.2006 Репутация: нет Всего: нет |
Вот примерно так
![]() Маленько грубовато... но принцип понятен Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |