найти расстояние в пересечении линии-круга - PullRequest
0 голосов
/ 13 июня 2019

Линия пересекает окружность с центром в C (cx,cy) и радиусом r. Линия описывается позицией P (px, py) и направлением D (dx, dy). P лежит внутри круга, а линия бесконечно длинна. Каково расстояние d от P до точки пересечения?

float Intersect(Vector2d C, float r, Vector2d P, Vector2d D){

    ...

    return d;
}

1 Ответ

1 голос
/ 13 июня 2019

Вы можете расширить скобки и решить квадратное уравнение для неизвестного t:

((px - cx) + t * dx)^2 + ((py - cy) + t * dy)^2 = r^2

Если (dx,dy) вектор нормализован (единичная длина), тогда необходимо значение t (положительный корень, если ваша линия действительно является лучом, начинающимся внутри круга).

Формула для точки пересечения (не требуется в текущем утверждении)

ix = px + t * dx
iy = py + t * dy
...