Author Topic: Есть 3 точки, через 2 проведена прямая. Как найти точку на прямой ближайшую к 3?  (Read 1422 times)

0 Members and 1 Guest are viewing this topic.

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
Есть прямая заданная 2 координатами (x1,y1) , (x2,y2) и точка А(x,y). Как найти координаты точки лежащей на прямой ближайшей к точке А?

ps Требуется для возвращения застрявшего бота на маршрут.

ya12

  • Активный участник
  • ***
  • Posts: 165
    • View Profile
По научному называется проекция точки на прямую.

Code: (clickermann) [Select]
//$_Bx[$_ind0], $_By[$_ind0], $_Bx[$_ind1], $_By[$_ind1] - координаты 2х точек на прямой
//$_Ax, $_Ay - координаты точки от которой нужна проекция
//результат $_B1x, $_B1y - координаты проекции

   $_tBx= ($_Bx[$_ind1] - $_Bx[$_ind0])
   $_tBy= ($_By[$_ind1] - $_By[$_ind0])
   $_Del = pow($_tBx, 2) + pow($_tBy, 2)
   
   if($_Del  != 0)
      $_t= (($_Ax-$_Bx[$_ind0])*$_tBx + ($_Ay-$_By[$_ind0])*$_tBy) / $_Del
      $_B1x = int($_Bx[0] + $_tBx * $_t)
      $_B1y = int($_By[0] + $_tBy * $_t)
           
   else print("Del=0")
   end_if