#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...