Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 514743

непонятка с формулой нахождения точки пересечения двух прямых - Геометрия

$
0
0
http://algolist.manual.ru/maths/geom...lineline2d.php
:

BOOL
IsLinesCross(_int64 x11, _int64 y11, _int64 x12, _int64 y12, _int64 x21, _int64 y21, _int64 x22, _int64 y22)
{
 
_int64 maxx1 = max(x11, x12), maxy1 = max(y11, y12);
_int64 minx1 = min(x11, x12), miny1 = min(y11, y12);
_int64 maxx2 = max(x21, x22), maxy2 = max(y21, y22);
_int64 minx2 = min(x21, x22), miny2 = min(y21, y22);
 
if (minx1 > maxx2 || maxx1 < minx2 || miny1 > maxy2 || maxy1 < miny2)
  return FALSE;  // Момент, када линии имеют одну общую вершину...
 
 
_int64 dx1 = x12-x11, dy1 = y12-y11; // Длина проекций первой линии на ось x и y
_int64 dx2 = x22-x21, dy2 = y22-y21; // Длина проекций второй линии на ось x и y
_int64 dxx = x11-x21, dyy = y11-y21;
_int64 div, mul;
 
 
if ((div = (_int64)((double)dy2*dx1-(double)dx2*dy1)) == 0)
  return FALSE; // Линии параллельны...
if (div > 0) {
  if ((mul = (_int64)((double)dx1*dyy-(double)dy1*dxx)) < 0 || mul > div)
    return FALSE; // Первый отрезок пересекается за своими границами...
  if ((mul = (_int64)((double)dx2*dyy-(double)dy2*dxx)) < 0 || mul > div)
    return FALSE; // Второй отрезок пересекается за своими границами...
}
 
if ((mul = -(_int64)((double)dx1*dyy-(double)dy1*dxx)) < 0 || mul > -div)
  return FALSE; // Первый отрезок пересекается за своими границами...
if ((mul = -(_int64)((double)dx2*dyy-(double)dy2*dxx)) < 0 || mul > -div)
  return FALSE; // Второй отрезок пересекается за своими границами...
 
return TRUE;
}

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

Viewing all articles
Browse latest Browse all 514743

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>