Принадлежность точки лучу



Дан луч и точка
Необходимо выяснить, принадлежит ли точка лучу

    Очевидно, что точка должна лежать на прямой луча. Если прямая вертикальная, то проверяем, чтобы точка лежала по оси OY с той же стороны, куда направлен луч. Если прямая не вертикальна, то проверяем аналогично относительны оси OX.


Листинг C++

bool point_in_ray (point p, point p1, point p2)
{
    // принадлежит ли точка прямой луча
    line l = toline (p1, p2);
    if (point_in_line (l, p) != 0) return false;

    // если прямая вертикальная, то проверяем на y
    if (abs (l.b) <= eps)
        if (p2.y >= p1.y) 
            return p.y >= p1.y;
        else
            return p.y <= p1.y;

    // иначе проверяем на x 
    if (p2.x >= p1.x) 
        return p.x >= p1.x;
    else
        return p.x <= p1.x;
}


13:06
20.07.2009


По всем вопросам обращаться: rumterg@gmail.com