【圆的面积并】O(n^2logn)的解法

题解完全参考的AekdyCoin牛、lishi牛和盾哥的题解,具体方法见这些人的文章,这里不罗嗦了

这里记几个值得一提的细节

1.叉积求面积记得除以2,还有扇形面积公式S = r^2 * p / 2,p是圆心角(弧度),刚好也要除以2

2.判好两个圆完全相同的情况,我用的是一个标记数组表示i有没有曾经被包含过,这个包含的意义是要取等号的,也就是说两个完全相同的圆,出现在前面的那个会被判为被包含,后面那个则不会

3.当区间跨极角的边界时,我的做法是拆成两个区间

4.我的两圆求交点的方法,如图:

haha

将O1当做极点,先求出O2的极角,再用余弦定理求出角AO1O2,然后就能得到A的极角,由于r1已知,所以可以根据极角求出A的坐标,另外一个交点类似。由于实际上我们需要求的是“有向线段”,所以用这个方法就能很方便的直接确定这条边的方向——由减去角AO1O2的指向加上的。但是这个方法由于有反三角函数的使用,所以精度不怎么样,需要用精度高的extended才能达到6位精度的要求

另外,这个算法实际上是很好实现的,我的代码100行左右

 

Ps:调试几何题有个画图器真是爽啊!

haha

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值