POJ3285 计算几何|线圆交点

poj.org/problem?id=3285

思路:

对于圆心(xi,yi)半径ri的圆,观察角度为特定a的所有点分布在以(xi, yi)为圆心,半径为ri/sin(a/2)的圆上,所以题目就是求三个圆的交点,即满足下列方程的点(x,y)

(x-xi)*(x-xi)+(y-yi)*(y-yi)=(ri*k)*(ri*k) for i in {1,2,3}

三个方程消去k,会有两种情况

1. 如果ri==rj, 那么第i和第j个方程消去k后是个直线方程

2. 如果ri!=rj, 那么第i个和第j个方程消去k后会得到一个圆的方程

所以,最终需要计算的是三种可能的情况

1. 两条直线的交点

2. 一条直线和一个圆的交点

3. 两个圆的交点

实现

两直线的交点

char linexline(double a0, double b0, double c0, double a1, double b1, double c1) {
    double d = a0*b1-b0*a1;
    if (d<EPS&&d>-EPS) return 0;
    rxx[0].x = (c0*b1-b0*c1)/d;
    rxx[0].y = (a0*c1-c0*a1)/d;
    return 1;
}

直线于圆的交点,(个人比较习惯点斜式直线方程,对于ax+by=c的方程,会转换为点斜式)

char linexcircle2(double x0, double y0, double dx0, double dy0, double x1, double y1, double r1) {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值