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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Square Card 计算几何-两圆相交面积

發布時間:2025/3/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Square Card 计算几何-两圆相交面积 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意 :

  • 給兩個圓,分別代表得分區域和獎勵區域,邊長為a的正方形以均等概率扔到平面后繞中心旋轉,保證一定會有某時刻正方形完全在得分區域內。
  • 如果某時刻正方形完全落在區域內,獲得相應分數,求正方形 既獲得得分又獲得獎勵的概率 比 正方形僅能獲得得分 的比率。

思路 :

  • 要使正方形有可能被一個圓完全包含,它的中心軌跡一定是一個圓,所以本題就轉化成了計算兩圓相交面積 與 第一個圓面積 的比值。
  • 一些細節,數據中獎勵區域不一定能完全包含正方形,以及兩圓位置的不同情況(相離,包含,相交)要分類討論。
  • 計算方法 :首先考慮兩圓的位置關系,若為相交,用余弦定理求得三角形圓心處的角度,然后計算兩個扇形的面積,再減去兩個三角形的面積(即兩對角線互相垂直的四邊形面積),得到的恰好就是兩圓相交部分的面積。

1.兩圓相離:

判定條件:兩圓半徑之和大于等于圓心距

計算方法:顯然相交面積為0

2.兩圓相含:兩圓半徑之差小于等于圓心距

計算方法:顯然相交面積為較小圓的面積

3.兩圓相交:以上兩種情況以外

計算中使用到的公式 :

  • cos是余弦函數,acos是求反余弦
  • 余弦定理 cos?=a2+b2?c22abcos? = \frac{a^2 + b^2 - c^2}{2a b}cos?=2aba2+b2?c2?
  • 扇形面積(利用角度) S=12αr2S=\frac{1}{2}\alpha r^2S=21?αr2
  • 兩對角線互相垂直的四邊形面積 S=12×積S=\frac{1}{2} \times {積}S=21?×
#include <iostream> #include <algorithm> #include <cmath> #include <cstring> #include <vector> #include <unordered_map> #include <unordered_set> #include <set> #include <map> #define endl '\n' #define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; const double pi = acos(-1); typedef long long ll;struct point {double x, y; };double calc(point a, double r1, point b, double r2) {double dist = sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));if (r1 + r2 <= dist) return 0;if (r1 > r2) swap(r1, r2);if (r2 - r1 >= dist) return pi * r1 * r1;double ang1 = acos((r1 * r1 + dist * dist - r2 * r2) / (2.0 * r1 * dist));double ang2 = acos((r2 * r2 + dist * dist - r1 * r1) / (2.0 * r2 * dist));return ang1 * r1 * r1 + ang2 * r2 * r2 - dist * r1 * sin(ang1); }int main() {int T;scanf("%d", &T);while (T -- ){double r1, x1, y1, r2, x2, y2, aa;scanf("%lf%lf%lf%lf%lf%lf%lf", &r1, &x1, &y1, &r2, &x2, &y2, &aa);if (r1 * r1 - aa * aa / 4 <= 0 || r2 * r2 - aa * aa / 4 <= 0){cout << "0.000000" << endl;continue;}point a = {x1, y1}, b = {x2, y2};double r3 = sqrt(r1 * r1 - aa * aa / 4) - aa / 2, r4 = sqrt(r2 * r2 - aa * aa / 4) - aa / 2;double res = calc(a, r3, b, r4);printf("%.6lf\n", res / (pi * r3 * r3));}return 0; }

總結

以上是生活随笔為你收集整理的Square Card 计算几何-两圆相交面积的全部內容,希望文章能夠幫你解決所遇到的問題。

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