https://ac.nowcoder.com/acm/contest/9981/E

思路:

根据r和a的关系一共分4类情况:
①染色面积为0
②染色面积为4个圆形
③染色面积为三棱锥的内表面减去12个小三角(不是三角形,而是一个三角形往内刨掉一个弓形)
④染色面积为三棱锥的内表面全体


对于第三点我是这么求的,我没用出题人的方法。我是圆形-弓形面积。

弓形面积公式: 

其中θ为圆心角, r为半径, a为弦长, h为圆心与弦构成的三角形的高。

球心到地面的距离是sqrt(6)*a/12;

剩下的根据高中基础的立体几何就可以算出来。

中间用到了一个tan(β/2),求角度的话用c++自带的反三角。

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=1e5;
const double pi=3.1415926525;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar();   while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
int main(void)
{cin.tie(0);std::ios::sync_with_stdio(false);double a,r;cin>>a>>r;double dis=sqrt(6)*a/12;if(r<=dis){printf("%.7f\n",0.0);}else if(r*r<=a*a/8){///相切double r1=r*r-dis*dis;///底面圆半径的平方printf("%.7f\n",4*pi*r1);}else if(r*r>=9*a*a/24){printf("%.7f\n",sqrt(3)*a*a);}else{double r1=r*r-dis*dis;///底面圆半径的平方double h1=sqrt(3)*a/6;///p在底面上的点到正三角形的垂直距离double xian=sqrt(r1-h1*h1);///弦长的一半double s=4*( (pi*r1)-3*(atan(xian/h1)*r1-2*xian*h1/2 ) );printf("%.7f\n",s);}
return 0;
}

三棱锥之刻(求三棱锥中心球与表面覆盖面积之和)相关推荐

  1. java编程基础篇-- 编写一个程序,从键盘输入三个整数,求三个整数中的最小值。

    编写一个程序,从键盘输入三个整数,求三个整数中的最小值. package Exam01;import java.util.Scanner;public class Topic03 {public st ...

  2. python求三个数平均值_python求三个数平均值

    本文收集整理关于python求三个数平均值的相关议题,使用内容导航快速到达. 内容导航: Q1:利用python3.x计算任意数据平均值 l=[1,2,3]def ave(a):print(sum(a ...

  3. 输入一个三位整数,求出该数字各个位的数字之和

    #include<stdio.h> int main() {int a,b,c,e,f;printf("请输入一个三位整数:");scanf("%d" ...

  4. matlab 三叶线,面积计算求三叶线r=asin3φ所围成的面 – 手机爱问

    2018-04-28 计算由曲线y=9-x^2与直线y=x+7围成的封闭区域的面积 计算由曲线y=9-x^2与直线y=x+7围成的封闭区域的面积 曲线y=9-x^2与直线y=x+7的两个交点为A.B. ...

  5. 求三个数的最小公倍数的解法之美

    从键盘上输入三个数,求其最小公倍数. 分析:最小公倍数是指能整除这三个数的公倍数中的最小者,可以利用循环穷举的方法,看是否能整除这三个数.若能整除这三个数,则输出其中的最小的数即为最小公倍数. 第一种 ...

  6. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  7. 2021牛客寒假算法基础集训营1 E.三棱锥之刻

    E.三棱锥之刻 P为正三棱锥内部的中心,PA,PD为正三棱锥外接球半径,OP为正三棱锥内切球半径 结论:已知正三棱锥的棱长为a,那么正三棱锥外接球半径为:64a\frac{\sqrt{6}}{4}a4 ...

  8. python函数编程求三个数的最小公倍数_Python求三个数的最小公倍数

    题目 求三个数的最小公倍数 思路 首先求两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数就是最终结果 有两种方案求两个数的最小公倍数 1. 分解质因数,也是短除法(在程序上差别不大) 循环 ...

  9. C ++ 函数模板求三个数的最大和

    #include <iostream> using namespace std; //声明函数模板 template<typename T> T max(T a, T b, T ...

最新文章

  1. NIO源码解析:IntBuffer基本使用
  2. eclipse运行android程序,总是启动一个新的AVD模拟器,解决办法
  3. .NET 6 新特性 PeriodicTimer
  4. python3读取excel方法封装_python-excel读写封装
  5. 领导:“请在今晚进行网络系统升级”
  6. hp1015驱动64位_HP LaserJet 1015 驱动下载
  7. 分享一个好用无广告无水印的绿色录屏软件
  8. 如何通过a链接实现图片下载
  9. 虚拟串口模拟器和串口调试助手使用教程
  10. 计算机主板外部接口功能,笔记本电脑主板接口功能分享
  11. u盘chk文件恢复图文教程
  12. 计算反转录转座子插入时间一:计算原理
  13. 计算机c盘加容量,win7 增加c盘空间方法_win7 如何增加c盘容量-win7之家
  14. 书单来了!大厂的技术牛人在读什么:阿里篇
  15. 【电子器件笔记3】电容参数和选型
  16. 装机必备,四款良心软件释放你的电脑潜力,用了就离不开
  17. 有赞 java_响应式架构与 RxJava 在有赞零售的实践
  18. vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
  19. php urlencode()函数详解
  20. WeX5数据组件详解

热门文章

  1. 一种在Houdini中让顶点动画循环的简单方法
  2. 院士给自己博士生写的一封信:博士生每天工作12小时只是一个下限
  3. 交流电源滤波器电路图及作用分析
  4. 设计模式 -- 面向对象设计原则、黑箱/白箱复用
  5. uniapp实现微信小程序登录注册功能
  6. SQL提高查询效率知识拾忆
  7. 基于RK3568开源鸿蒙的助农金融服务终端设计方案
  8. 烂泥:利用PhotoShop自定义艺术字体
  9. mysql主从数据一致性问题及MHA和MGR的架构及底层原理
  10. Koordinator 1.0 正式发布:业界首个生产可用、面向规模场景的开源混部系统