POJ 1263 簡單幾何?!

2021-07-10 14:21:08 字數 2279 閱讀 4274

#include #include #include #include #include #include using namespace std;

const double dinf = 1e100;

struct point

};typedef point vector;

typedef vectorpolygon;

vector operator +(vector a, vector b)//

vector operator -(point a, point b)//

vector operator *(vector a, double p)//

vector operator /(vector a, double p)//

bool operator <(const point &a, const point &b)//

const double eps = 1e-10;

int dcmp(double x)//

bool operator ==(const point &a, const point &b)//

double dot(vector a, vector b)//

double length(vector a)//

double cross(vector a, vector b)//

double angle(vector a, vector b)//

vector normal(vector a)//

vector rotate(vector a, double rad) //

struct line

; line(point p, vector v)

bool operator < (const line& l) const

point point(double t)

line move(double d) };

bool onleft(line l, point k)

struct circle

point point(double a) };

int getlinecircleintersection(line l, circle c, int num, vector>& sol)

// 相交

t1 = (-f - sqrt(delta)) / (2 * e); sol.push_back(make_pair(l.point(t1), num));

t2 = (-f + sqrt(delta)) / (2 * e); sol.push_back(make_pair(l.point(t2), num));

return 2;

}point reflect(line k, point x)

std::vectorres;

line l;

double x, y, r, px, py;

int n, kase;

int main(int argc, char const *argv)

scanf("%lf%lf%lf%lf", &x, &y, &px, &py);

l = line(point(x, y), point(px, py));

printf("scene %d\n", ++kase);

int cnt = 0;

while (true)

if (dcmp(fabs(initpx) - dinf) >= 0) break;

cnt++;

if (cnt > 10) break;

initp = l.point(initpx);

printf("%d ", cirnum + 1);

point nextp = reflect(line(initp, res[cirnum].c - initp), l.p);

l = line(initp, nextp - initp);

} if (cnt <= 10) printf("inf\n\n");

else printf("...\n\n");

} return 0;

}

這題卡了一天了。。。確實是一道思路簡潔的幾何,一道直線打在球上,發生反射。

要準備好乙個反射的模板,

if (dcmp(fabs(initpx) - dinf) >= 0) break;

cnt++;

if (cnt > 10) break;

就這玩意兒,第十個打空就應該inf,否則。。。 還以為自己模板錯了。

poj 1263 反射問題

題意 一條射線在n個圓間反射,求依次經過哪些圓。用了一些自己寫的簡單的函式,這道題要注意第11個圓也得判斷。include include include include using namespacestd constdoubleep 1e 8 constdoubleinf 1e9 structp...

POJ 3304 Segments 簡單幾何

題目大意 給出n條線段,現在問是否存在一條直線,使得所有線段向這條直線的投影存在乙個共同的交點 題目分析 題意有點抽象,需要轉換一下,因為所有的線段向某一條直線的投影存在乙個交點,那麼在那條直線上,從交點位置開始,沿著垂直於直線的方向做另一條直線,會發現這條直線與n條線段都存在乙個交點,也就是都相交...

poj 1113 凸包 簡單幾何計算

題意 給n個平面上的點,現在要在離點外l公尺處建城牆,使得城牆把所有點都包含進去且城牆的長度最短。解析 韜哥出的某次訓練賽上a出的第一道計算幾何,算是大水題吧。用convexhull演算法把凸包求出來,然後加加減減就a了。計算見下圖 好久沒玩畫圖了啊好開心。include include inclu...