⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getnearestpoint.txt

📁 Line intersect get the nearest point.
💻 TXT
字号:
Listing 3. Finding the Nearest 
Point on a Line Segment.

// Procedure: GetNearestPoint
// Purpose: Find the nearest point on a line segment
// Arguments: Two endpoints to a line segment a and b,
// and a test point c
// Returns: Sets the nearest point on the segment in nearest

void CFateView::GetNearestPoint(tPoint2D *a, tPoint2D     *b,tPoint2D *c,tPoint2D *nearest)
{
/// Local Variables ///////////////////////
    long dot_ta,dot_tb;

    // SEE IF a IS THE NEAREST POINT - ANGLE IS OBTUSE
    dot_ta = (c->x - a->x)*(b->x - a->x) + (c->y -     a->y)*(b->y - a->y);
    if (dot_ta <= 0) // IT IS OFF THE AVERTEX
      {
      nearest->x = a->x;
       nearest->y = a->y;
      return;
      }
    dot_tb = (c->x - b->x)*(a->x - b->x) + (c->y -     b->y)*(a->y - b->y);
    // SEE IF b IS THE NEAREST POINT - ANGLE IS OBTUSE
    if (dot_tb <= 0)
      {
      nearest->x = b->x;
      nearest->y = b->y;
      return;
}
    // FIND THE REAL NEAREST POINT ON THE LINE SEGMENT -      BASED ON RATIO
    nearest->x = a->x + ((b->x - a->x) * dot_ta)/(dot_ta +     dot_tb);
    nearest->y = a->y + ((b->y - a->y) * dot_ta)/(dot_ta +     dot_tb);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -