日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/3/12 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三棱锥之刻(求三棱锥中心球与表面覆盖面积之和) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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; }

?

總結

以上是生活随笔為你收集整理的三棱锥之刻(求三棱锥中心球与表面覆盖面积之和)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。