powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Где почитать про графику???
15 сообщений из 15, страница 1 из 1
Где почитать про графику???
    #32684344
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще-то в настоящее время проблема такая - я рисую на канве разнообразные полигоны и не могу придумать красивый способ определения того, на каком полигоне щелкаю мышкой. Если щелкать на вершинах, то еще ладно, если же щелкать на ребрах полигонов, то становится гораздо грустнее. Где бы посмотреть решения аналогичных проблем?
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32684426
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если полигоны крашеные, то по цвету пиксела, в который ткнута мыжь.
А если нет, то задачка далеко не тривиальная....
Но лучше всего - выпендриться с закраской.
Сделать на каждый полигон дублирующий HDC и в него рисовать крашеный полигон, потом в этом HDC и смотреть, попали в цвет или не попали.
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32684450
Shr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если линия (удобнее - горизонтальная или вертикальная), выпущенная из точки, пересекает ребра полигона нечетное число раз - то точка в нем, если нет - то нет. Особый случай с пересечением вершин - и как там поступали, я не помню :(
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32684521
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 СЕМЬ: А что такое HDC? Надеюсь, Вы не шокированы таким вопросом?
2 Shr: Придется таки перебирать все полигоны со всеми их ребрами? И решать уравнения на наличие точек пересечения с каждым ребром? Блин, вот бы еще знать, насколько быстро будет это работать на нескольких сотнях полигонов...
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32684624
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА что такое HDC? Надеюсь, Вы не шокированы таким вопросом?
нет, ибо
авторя рисую на канве
сразу навело на мысль о борланде.
Люди, работающие с борландом редко и в CDC лезут, а в HDC и совсем наверно никогда...

HDC - это Handle от DeviceContext'а.
DeviceContext - это контект устройства. Сущность, через которую, например, идёт общение с окном. Криво сказал. Ну вобщем, через девайсконтехт можно рисововать всячески.
Дык вот. Каждый раз, когда добавляется полигон,
тебе надо создавать под него HDC через CreateCompatibleDC()
потом в этот DC отрисовать _закрашенный_ полигон.
И всё, что нужно по клику - пройтись по списку (список можно сделать сортированным, к примеру, по клику вытаскивать полигон "наверх" и на канве и в списке) и найти там первый HDC который в данной точке содержит крашеный пихел GetPixel(HDC,x,y);
Потом посмотреть, какой полигон соответствует этому HDC и всё.

Если пугают девайсконтехты, и слово "конва" ближе :) то можно делать тоже самое тока создавая для каждого полигона скрытую конву, в ней рисовать раскрашенный полигон и потом пробегаться по списку конв. Правда, боюсь, это будет медленнее и накладнее. Но может и нет.
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32684650
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы делал это через WIN32 Regions. Только не все операционки это поддерживают (только NT)
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32685172
Lepsty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Направления поисков примерно яснЫ
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32685363
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry, но помоему вы путаете теплое с мягким.

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

а с определеним по цвету изврат, а если два полигона будут иметь одинаковый цвет, а если они перекрываются и хочется как в максе по клику перемещаться по оси Z и выделять их по очереди
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32686402
biomen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
www.gamedev.ru
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32686822
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторя бы делал так: создать массив в который помещать создаваемые полигоны,
точнее объекты описывающие их вершины.

Пробема не в том, как нарисовать, а в том, как потом по клику найти.
Если у тебя тока вершины и 10000 полигонов - задерёшься.

автора с определеним по цвету изврат,
не присовокупляйте, да не прсовокуплены будете!
автора если два полигона будут иметь одинаковый цвет,
А они и будут иметь один цвет, но в разных hdc. Иначе надо будет для поиска ещё и цвет помнить.
автора если они перекрываются и хочется как в максе по клику перемещаться по оси Z и выделять их по очереди
да запросто. Помним последний hdc и делаем поиск со следующего.

Читайте внимательнее идею, которую я изложил. там _много_hdc_

авторЯ бы делал это через WIN32 Regions. Только не все операционки это поддерживают (только NT)
Вот требования к регионам:
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.

Хорошая идея! Тока не помню, есть там функции проверки попадания точки в регион?
В принципе, можно сделать так: создать регион на точке и потом его через AND сложить - если пусто = промазали.
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32686914
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ бы делал это через WIN32 Regions. Только не все операционки это поддерживают (только NT)
Вот требования к регионам:
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
[/quot]

Значит, перепутал.

автор
Хорошая идея! Тока не помню, есть там функции проверки попадания точки в регион?
В принципе, можно сделать так: создать регион на точке и потом его через AND сложить - если пусто = промазали.


Функция проверки попадания точно есть :
SDK
PtInRegion
The PtInRegion function determines whether the specified point is inside the specified region.

BOOL PtInRegion(
HRGN hrgn, // handle to region
int X, // x-coordinate of point
int Y // y-coordinate of point
);
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32687137
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Ну значит, стало быть, всяко лучше через регионы делать :)
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32687811
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://algolist.manual.ru/maths/geom/index.php
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32828291
Dubrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще использовать 'теневой экран', т.е. создать дополнительный DC, связать его с большой BMP (DIB), а в нее записывать не RGB компоненты цвета, а идентификатор кривой (если использовать 32bit DIB, то хватит).
---
С уважением, Dubrov.
P.S. Такой метод я использовал еще на ZX-Spectrum в 1997году, так что прошу не материть, это просто мысль.
...
Рейтинг: 0 / 0
Где почитать про графику???
    #32829659
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я это как раз и предложил, тока не один DC, а несколько, иначе перекрытия будут. А вот цвет использовать чёрно-белый
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Где почитать про графику???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]