leo Мда, с сылкой не хорошо вышло... Благодарствую за идею оптикизации... Iceberg На то, он и луч, что в бесконечность уходит. И всё же: если метод "луча" лучше, почему в достаточно юзаемых пакетах реализован метод "ректов" ? и есть ли способ как-нибудь оченить эти алгоритмы по заданным выше критериям ? Если попробовать через метод "при помощи RDTSC", то я думаю, тот же метод "ректов", не криво реализованый, на асме (но и без особой оптимизации), обгонит ту же Win32 реализацию... вобщем нельзя ли сравнить это как-нибудь математически ?
crypto Ты очень подробно расписал, добавить было нечего =) P_F Посмотри в сторону http://www.wykobi.com, методы point_in_XXX
P_F Это точно, если использовать двоичный поиск ректа в RGNDATA.Buffer, то получается намного быстрее (до 5-10 раз) по сравнению с виндовым PtInRegion
PtInRect? Код (Text): BOOL STDCALL PtInRect(CONST RECT *lprc, POINT pt) { return((pt.x >= lprc->left) && (pt.x < lprc->right) && (pt.y >= lprc->top) && (pt.y < lprc->bottom)); }
Avoidik Нет, CreatePolygonRgn + PtInRegion Но быстрее GetRegionData + двоичный поиск в массиве ректов lpRgnData->Buffer, т.к. все ректы в массиве отсортированы по Top и Left