Java教程

三棱锥之刻

本文主要是介绍三棱锥之刻,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

原题链接

  • 题意:给出正四面体棱长 \(a\) 并且给出以正四面体为中心的半径 \(r\),求出以正四面体中心为球心,给出的半径 \(r\) 为半径求平面相交面积。
  • 题解:当我复习了一下正三棱锥和正四面体,并且顺便看了一下2019年全国一的数学第12道填空,然后这道题就切掉了。
  • 代码:
#include<bits/stdc++.h>

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const ld pi = acos(-1.0);
void solve() {
    //cout << sqrt(3)/3 << endl;
    //cout << pi << endl;
    ld a, rp;
    cin >> a >> rp;
    ld r1, r2;
    ld b = a/sqrt(2);
    r1 = sqrt(a * a + b * b)/2;
    r2 = r1 - sqrt(b * b - a * a/3);
    ld realr = sqrt(rp*rp - r2 * r2);
    //cout << r1 << " " << r2 << endl;
    if (rp < r2) {
        cout << 0 << endl;return;
    }
    ld cmp_r1 = sqrt(3)*a/6;
    ld cmp_r2 = sqrt(3)*a/3;
    ld s1 = sqrt(3)*a*a/4;
    //cout << realr << endl;
    //cout << cmp_r2 << endl;
    if (realr > cmp_r2) {
        cout << setprecision(10)<<4*s1 << endl;
    } else if (realr < cmp_r1) {
        //while (1);
        cout << setprecision(10)<< 4 * pi * realr*realr << endl;
    } else {
        ld r = realr;
        ld h = cmp_r1;
        ld Cos_1 =  (4 * h * h-2 * r * r)/(2 * r*r);
        ld du = acos(Cos_1) * 3;
        ld s_san = h * sqrt(r * r - h * h);
        ld ans = s_san * 3 * 4;
        ans += pi * r * r * (2 * pi-du)/(2 * pi) * 4;
        cout << setprecision(10) << ans << endl;
    }
}
signed main() {
   ll t = 1;//cin >> t;
   while (t--) {
      solve();
   }
}
这篇关于三棱锥之刻的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!