Здравствуйте, HI-TECH, Вы писали:
HT>здравствуйте!!
HT>Прошу помочь вот в каком вопросе: HT>Все знают функции Винды для работы с так называемыми регионами! HT>Очень классная вещь, не правда ли!? Но вот КАК получить вершины региона из его HRGN ??? HT>И возможно ли это??
HT>Вот кстати и задачка в связи с этим:
HT>Два треугольника на плоскости могут прекрываться любым из возжных способов!!!! HT>Задача -- независимо от способа перекрытия треугольников определять вершины области их прекрытия!! HT>Как вам??? HT>Или хотя бы находить точку 100%-но принадлежащую этой области!!
HT>Я ломаю голову уже почти месяц!!! Хотел с помощью регионов виндовозных решить — но видать забыл ....
HT>Благодарен заранее.. HI-TECH
HT>Вот вам задачка по геометрии... Решивший может считать себя Евклидом и Пифагором вместе взятыми!!!
Может, я не понял идеи, но, если надо найти точку внутри региона, то вроде как есть такая функция — ptInRegion, которая возвращает true, если точка принадлежит региону... Работает для любых сложных регионов. Сам проверял. А насчет вершин — есть ф-я GetRegionData, которая возвращает внутреннее представление региона. Посмотри, может, поможет.
А насчет вершин такая ситуация — у тебя есть шесть линий (стороны прямоугольника). Каждая линия задается уравнением прямой, проходящей через две точки. Уравнение можно найти в любом справочнике по аналитической геометрии (хотя бы в Выгодском). По уравнению двух прямых можно найти точку их пересечения, просто решив систему их этих двух уравнений (решается матричным способом. способ можно найти в интернете, а общая картина такова: уравнение1 : ax+by=c
уравнение 2: dx+ey=f. A — матрица коэффицентов (a,b,d,e) X — вектор переменных (x,y) B — вектор свободных коэффициентов (c,f). Систему из двух вышеприведенных уравнений можно записать, как AX=B, следовательно, решение системы X (т.е. значения x и y) находится как X=A^-1B (а в минус первой на б) A^-1 — это обратная матрица к A. Поскольку матрица A 2x2, то для A^-1 можно вообще сразу записать формулу (тоже можно найти в инете — но на самом деле это At/det(A), где At — транспонированная A, det(A) — определитель A = a*e-b*d). Если det(A)=0, то прямые либо параллельны, либо совпадают. Если det(A) не 0 — находятся (x,y) точки пересечения. Найдя таким образом точки пересечения каждой с каждой прямой, ты найдешь вершины полученной фигуры.