三棱锥之刻(求三棱锥中心球与表面覆盖面积之和)
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;
}
三棱锥之刻(求三棱锥中心球与表面覆盖面积之和)相关推荐
- java编程基础篇-- 编写一个程序,从键盘输入三个整数,求三个整数中的最小值。
编写一个程序,从键盘输入三个整数,求三个整数中的最小值. package Exam01;import java.util.Scanner;public class Topic03 {public st ...
- python求三个数平均值_python求三个数平均值
本文收集整理关于python求三个数平均值的相关议题,使用内容导航快速到达. 内容导航: Q1:利用python3.x计算任意数据平均值 l=[1,2,3]def ave(a):print(sum(a ...
- 输入一个三位整数,求出该数字各个位的数字之和
#include<stdio.h> int main() {int a,b,c,e,f;printf("请输入一个三位整数:");scanf("%d" ...
- 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. ...
- 求三个数的最小公倍数的解法之美
从键盘上输入三个数,求其最小公倍数. 分析:最小公倍数是指能整除这三个数的公倍数中的最小者,可以利用循环穷举的方法,看是否能整除这三个数.若能整除这三个数,则输出其中的最小的数即为最小公倍数. 第一种 ...
- 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数
第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...
- 2021牛客寒假算法基础集训营1 E.三棱锥之刻
E.三棱锥之刻 P为正三棱锥内部的中心,PA,PD为正三棱锥外接球半径,OP为正三棱锥内切球半径 结论:已知正三棱锥的棱长为a,那么正三棱锥外接球半径为:64a\frac{\sqrt{6}}{4}a4 ...
- python函数编程求三个数的最小公倍数_Python求三个数的最小公倍数
题目 求三个数的最小公倍数 思路 首先求两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数就是最终结果 有两种方案求两个数的最小公倍数 1. 分解质因数,也是短除法(在程序上差别不大) 循环 ...
- C ++ 函数模板求三个数的最大和
#include <iostream> using namespace std; //声明函数模板 template<typename T> T max(T a, T b, T ...
最新文章
- NIO源码解析:IntBuffer基本使用
- eclipse运行android程序,总是启动一个新的AVD模拟器,解决办法
- .NET 6 新特性 PeriodicTimer
- python3读取excel方法封装_python-excel读写封装
- 领导:“请在今晚进行网络系统升级”
- hp1015驱动64位_HP LaserJet 1015 驱动下载
- 分享一个好用无广告无水印的绿色录屏软件
- 如何通过a链接实现图片下载
- 虚拟串口模拟器和串口调试助手使用教程
- 计算机主板外部接口功能,笔记本电脑主板接口功能分享
- u盘chk文件恢复图文教程
- 计算反转录转座子插入时间一:计算原理
- 计算机c盘加容量,win7 增加c盘空间方法_win7 如何增加c盘容量-win7之家
- 书单来了!大厂的技术牛人在读什么:阿里篇
- 【电子器件笔记3】电容参数和选型
- 装机必备,四款良心软件释放你的电脑潜力,用了就离不开
- 有赞 java_响应式架构与 RxJava 在有赞零售的实践
- vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
- php urlencode()函数详解
- WeX5数据组件详解