给出圆心O的坐标, 和半径r, 再给出点A,B的坐标构成直线AB, 求出圆与直线AB交点的坐标
如下图
Step1: 首先求出圆心c在直线l 上的投影点pr的坐标
可通过求解向量p1pr(p1pr的长度 * p1p2的单位向量)
Step2: 计算向量p1p2的单位向量e, 再勾股定理求出base的长度, 进而求出向量base
Step3: 最后,以pr作为起点, 向正or负方向加上该向量, 就可以得到圆与直线的交点了
程序代码参考
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
typedef struct node
{
double x, y;
}NODE;
inline NODE Vector(NODE A, NODE B); //向量AB
double cross(NODE A, NODE B, NODE P);
inline double dis2(NODE a, NODE b);
double disLine(NODE A, NODE B, NODE P);
double dot(NODE A, NODE B, NODE P);
NODE prxy(NODE A, NODE B, NODE O);
NODE Vbase(NODE A, NODE B, NODE O, double r);
int main()
{
NODE A, B, O;
double r;
cin >> O.x >> O.y>>r;
cin >> A.x >> A.y >&g