求圆与直线的交点的方法是:
- 求圆心c在直线l上的投影点pr
- 求出直线l上的单位向量e
- 根据r和pr的长度来计算出圆内线段部分的一半base
- 用pr±base*e即得到答案
题目:CGL_7_D
AC代码:
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
#define COUNTER_CLOCKWISE -1 //逆时针
#define CLOCKWISE 1 //顺时针
#define ONLINE_BACK -2 //p2 p0 p1依次排列在一条直线上
#define ONLINE_FRONT 2 //p0 p1 p2依次排列在一条直线上
#define ON_SEGMENT 0 //p2在线段p0p1上
#define EPS 1E-8
class Point
{
public:
double x, y;
Point()
{
}
Point(double x, double y)
{
(*this).x = x;
(*this).y = y;
}
double operator^(const Point &p) const //叉乘
{
return x * p.y - y * p.x;
}
double o