[計算幾何]圓與三角形是否相交
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1298
把三角形的每條邊單獨判斷,先判斷兩個點是否都在裡面,是否一個點在裡面一個點在外面,直接return。
然後判斷點到直線的距離是否小於等於r,是的話用餘弦定理判斷和圓是否有交點,原理畫圖就能明白,如果沒有交點的話在圓外的兩個角必定有一個是鈍角,用餘弦定理判斷是否小於0即可。
順便一提,如果不需要用到double型別就都用long long型別,提高精度,點積叉積兩點間距離的平方都是整數。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct vec{
ll x, y;
}c;
ll r;
ll dot(const vec &a, const vec &b){ return a.x * b.x + a.y * b.y; }
ll cross(const vec &a, const vec &b){ return a.x * b.y - a.y * b.x; }
vec sub(const vec &a, const vec &b){ return vec{b.x - a.x, b.y - a.y}; }
ll dist2(const vec &a, const vec &b){ return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y); }
bool judge(const vec &a, const vec &b)
{
if (dist2(c, a) < r * r && dist2(c, b) < r * r) return 0;
if (dist2(c, a) <= r * r && dist2(c, b) >= r * r || dist2(c, b) <= r * r && dist2(c, a) >= r * r) return 1;
if (cross(sub(a, c), sub(a, b)) * cross(sub(a, c), sub(a, b)) > r * r * dist2(a, b)) return 0;
if (dist2(a, b) + dist2(b, c) < dist2(a, c) || dist2(b, a) + dist2(a, c) < dist2(b, c)) return 0;
else return 1;
}
inline ll in()
{
ll res=0,p=1;
char c=getchar();
while(c<'0'||c>'9') {if(c=='-') p=-1; c=getchar();}
while(c>='0'&&c<='9') res=res*10+c-48,c=getchar();
return p*res;
}
int main()
{
int t;
t = in();
vec p1, p2, p3;
while (t--){
c.x = in(), c.y = in(), r = in();
p1.x = in(), p1.y = in(), p2.x = in(), p2.y = in(), p3.x = in(), p3.y = in();
if (judge(p1, p2) || judge(p2, p3) || judge(p3, p1)) puts("Yes");
else puts("No");
}
return 0;
}
相關文章
- 計算幾何
- 計算幾何:模板
- 計算幾何模板
- Something about 計算幾何
- [筆記] 計算幾何筆記
- 計算幾何 —— 二維幾何基礎 —— 距離度量方法
- SGU 124 Broken line(計算幾何)
- 計算幾何——平面最近點對
- POJ - 1556 【計算幾何 + 最短路】
- 【學習筆記】計算幾何筆記
- 邊緣計算、霧計算、雲端計算區別幾何?
- BNUOJ 12887 isumi(計算幾何+最大流)
- SGU 120 SGU 228 Archipelago(計算幾何)Go
- 用css畫出兩個大圓相交,可以在各自圓及相交部分輸入文字CSS
- 丘成桐演講全文:幾何與計算數學的關係
- 計算幾何(一):凸包問題(Convex Hull)
- POJ 1113 Wall(思維 計算幾何 數學)
- 兩圓相交求面積c++C++
- 三維幾何生成:多段線、圓弧
- HNOI2016礦區(計算幾何+對偶圖)
- 計算機視覺—圖片幾何變換(2)計算機視覺
- CodeForces 887 E. Little Brother(計算幾何+二分)
- 判斷元素是否在視口和元素相交
- 【LeetCode】1496. 判斷路徑是否相交(Java)LeetCodeJava
- 百度造車,勝算幾何?
- [幾何]計算不規則多邊形的面積、中心、重心
- Python中OpenCV劃線、畫圓、橢圓、新增文字等幾何圖形繪製操作PythonOpenCV
- 【第一道計算幾何題】 UVA11178 Morley‘s Theorem (二維幾何,旋轉直線求求交點)REM
- JSXGraph幾何繪圖證明解答【五點共圓】問題JS繪圖
- 齊次座標與投影幾何
- 【IDL】幾何圖形數學運算函式函式
- # 數值計算:三角形積分
- 計算圓的面積程式碼
- 橢圓曲線加法原理計算
- 學雲端計算與大資料前景如何?就業又該何去何從?大資料就業
- 計算兩豎直直線與橢圓圍成部分面積
- 平面幾何
- 神奇的周幾計算器