圓與直線交點題目鏈結
#include
//使用scanf和printf的標頭檔案
#include
//使用c風格字串函式的標頭檔案
#include
//使用演算法庫的標頭檔案,max,min,swap,sort等
#include
//使用cin,cout的標頭檔案
#include
//數學標頭檔案
#include
//使用memset函式的標頭檔案
#include
using
namespace std;
#define ll long long
const
double pi=
3.1415926535
;const
double eps=
1e-10
;struct pot//點
//建構函式初始化
void
prf_pot()
\n",x,y);}
};typedef pot vec;
double
operator
^(pot a,pot b)
vec operator
-(pot b,pot a)
vec operator
+(pot a,pot b)
//(根據兩個點返回向量);
vec operator
*(vec a,
double k)
//向量乘以乙個常數(及對向量的拉伸,返回向量)
vec operator
/(vec a,
double k)
//向量除以乙個常數(及對向量的收縮,返回向量)!!注意k不為0 !!
bool
operator
<
(const pot a,
const pot b)
//判斷兩個點之間的大小(橫座標作為第一縱座標作為第二引數進行判斷)
bool
operator==(
const pot a,
const pot b)
double
dot(vec a,vec b)
double
length
(vec a)
struct line//線(點和方向向量構成)
pot point
(double x)};
pot foot_pot
(pot a,pot b,pot p)
//(點積滿**換律)
struct cir
;double
area()
intis_relation
(cir a)
//通過角度求座標
inline pot point
(double a)
//a指的是距x軸偏移的角度 };
intsgn
(double x)
double
dis_p
(pot a,pot b)
intlinecirceinter
(line l,cir c,vector
& sol)
double base=
sqrt
(c.r*c.r-dis)
; pot e=l.v/
length
(l.v)
;//單位方向向量
sol.
push_back
(pr+e*base)
; sol.
push_back
(pr-e*base)
;return2;
}vector sol;
intmain()
sol.
clear()
;puts(""
);}return0;
}
計算幾何之求圓與直線的交點
求圓與直線的交點的方法是 求圓心c在直線l上的投影點pr 求出直線l上的單位向量e 根據r和pr的長度來計算出圓內線段部分的一半base 用pr base e即得到答案 題目 cgl 7 d ac include include include using namespace std define ...
圓與線段的交點
poj 3819 給出一條線段的兩個端點,再給出n個圓,求出這條線段被所有圓覆蓋的部分佔了整條線段的百分比。圓與線段的交點 向量ab 的引數方程 p a t b a 0 t 1 將點帶入圓的方程即可。注意 有交點 0 t 1 此題求覆蓋的部分。則 若求得 t 滿足 double ask double...
求向量與圓交點
這個題也是被t4專家暴虐的題,我直接直線然後delta。跟高中數學一樣,大佬叫我用向量的方式還是啥做,就是不要解方程,結果還是沒想出來。後來把這個題分享給乙個師兄,他剛好在一篇講光線追蹤的 看到然後拿給我看,書中是球面不是圓,都差不多,下面按我的理解寫一下。首先三維空間下,假設圓心o a,b,c 半...