Как в Direct2D получить координаты точки пересечения двух линий?

Рейтинг: 3Ответов: 1Опубликовано: 03.05.2015

Пишу приложение Win32 в Visual C++ с использованием Direct2D. Нарисовал две линии, у первой координаты (x1, y1), а у второй — (x2, y2). Вызвал функцию CompareWithGeometry, чтобы определить, пересекаются ли эти линии. Функция ответила, что не пересекаются. Повернул первую линию на 20 градусов. Опять вызвал CompareWithGeometry. Сказала, что теперь пересекаются.

Мне нужно узнать координаты (x, y) точки пересечения. Каким образом я могу это сделать в Direct2D?

Ответы

▲ 1
BOOL isIntersectLine(const LPPOINT a1, const LPPOINT a2, 
                     const LPPOINT b1, const LPPOINT b2){
   float t, dot;
   POINT c;
   POINT b = { a2->x - a1->x, a2->y - a1->y };
   POINT d = { b2->x - b1->x, b2->y - b1->y };

   dot = (float)(b.x * d.y - b.y * d.x);
   if(dot == 0.0f)
        return FALSE;

   c.x = b1->x - a1->x;
   c.y = b1->y - a1->y;
   t   = (float)(c.x * d.y - c.y * d.x) / dot;
   if((t < 0.0f) || (t > 1.0f))
        return FALSE;

   t = (float)(c.x * b.y - c.y * b.x) / dot;
   if((t < 0.0f) || (t > 1.0f))
       return FALSE;
   return TRUE;
}