根据发射距离R的不同,可分为四种情况
- 碰不到
- 四个圆
- 圆和三角的交*4
- 正四面体的全部内表面
因为第三种情况忘记*4浪费了一个晚上。
具体来说就是计算小三角形的面积,再加上一个最小的扇形面积。
重合部分的面积等于
from math import sqrt, acos, pi a, R = map(float, input().split()) d = sqrt(6) * a / 12 #中心到面的距离 r = sqrt(R * R - d * d) if d < R else 0 #三角形上的圆的半径 if R <= d: ans = 0 #碰不到 elif r <= a / (sqrt(3) * 2): #四个圆 ans = 4 * pi * (R * R - d * d) elif R >= a * sqrt(6) / 4: #全覆盖 ans = a * a * sqrt(3) else: #切掉 DF = a / (2 * sqrt(3)) GF = sqrt(r * r - DF * DF) #求底面三角形 半底长 deg = pi / 3 - acos(DF / r) # 小扇形的弧度 ans = GF * DF * 3 shan = deg * 0.5 * r * r ans += 6 * shan ans *= 4 #就漏了这一句 print(ans)