[计算几何] (二维)圆与直线的交点

给出圆心O的坐标, 和半径r, 再给出点A,B的坐标构成直线AB, 求出圆与直线AB交点的坐标

 

如下图

 Step1: 首先求出圆心c在直线l 上的投影点pr的坐标

可通过求解向量p1pr(p1pr的长度 * p1p2的单位向量)

Step2: 计算向量p1p2的单位向量e, 再勾股定理求出base的长度, 进而求出向量base

Step3: 最后,以pr作为起点, 向正or负方向加上该向量, 就可以得到圆与直线的交点了

程序代码参考

#include
#include
#include
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

你可能感兴趣的:(小小智慧树,圆与直线,二维)