【POJ2504】Bounding box(计算几何)
2017-01-05 19:31
197 查看
记录一个菜逼的成长。。
题目链接
题目大意:
给你一个正n边形的三个点,求一个边平行于坐标轴的面积最小的矩形,能覆盖正n边形的所有点。
这题用到向量旋转公式(逆时针旋转,若顺时针则r改为-r):
(x1−x0)=(x′−x0)∗cos(r)−(y′−y0)∗sin(r);
(y1−x0)=(x′−x0)∗sin(r)+(y′−y0)∗cos(r);
这应该好推的。
先求出外接圆的圆心,作为(x0,y0),然后将给出三点的任意一点作为(x’,y’)
然后就可以用上面的公式求出正n边形的其余点的坐标。
保存四个边界值就行了
ps:之前的博客里的代码头文件太长,,似乎会影响阅读。以后会改的。
题目链接
题目大意:
给你一个正n边形的三个点,求一个边平行于坐标轴的面积最小的矩形,能覆盖正n边形的所有点。
这题用到向量旋转公式(逆时针旋转,若顺时针则r改为-r):
(x1−x0)=(x′−x0)∗cos(r)−(y′−y0)∗sin(r);
(y1−x0)=(x′−x0)∗sin(r)+(y′−y0)∗cos(r);
这应该好推的。
先求出外接圆的圆心,作为(x0,y0),然后将给出三点的任意一点作为(x’,y’)
然后就可以用上面的公式求出正n边形的其余点的坐标。
保存四个边界值就行了
ps:之前的博客里的代码头文件太长,,似乎会影响阅读。以后会改的。
#include <cstdio> #include <algorithm> #include <cmath> using namespace std; int INF = 0x3f3f3f3f; double pi = acos(-1); struct Point{ double x,y; }a,b,c; Point cal_cirle(Point a,Point b,Point c) { Point ret; ret.x = ((b.y-c.y) * (pow(a.x,2)-pow(b.x,2)+pow(a.y,2)-pow(b.y,2)) - (a.y-b.y) * (pow(b.x,2)-pow(c.x,2)+pow(b.y,2)-pow(c.y,2))) / ((a.x-b.x)*(b.y-c.y)-(b.x-c.x)*(a.y-b.y)) / 2; ret.y = -(a.x-b.x) / (a.y-b.y) * (ret.x - (a.x+b.x)/2) + (a.y+b.y) / 2; return ret; } double solve(Point a,Point p,int n) { double r = 2 * pi / n; double mxx = a.x,mnx = a.x,mxy = a.y,mny = a.y; for( int i = 0; i < n; i++ ){ double tmpx = (a.x - p.x) * cos(i*r) - (a.y - p.y) * sin(i*r) + p.x; double tmpy = (a.x - p.x) * sin(i*r) - (a.y - p.y) * cos(i*r) + p.y; mxx = max(mxx,tmpx); mnx = min(mnx,tmpx); mxy = max(mxy,tmpy); mny = min(mny,tmpy); } return (mxx - mnx) * (mxy - mny); } int main() { int n,cas = 1; while(~scanf("%d",&n),n){ scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y); Point p = cal_cirle(a,b,c); printf("Polygon %d: %.3f\n",cas++,solve(a,p,n)); } return 0; }
相关文章推荐
- Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box)
- Bounding box POJ - 2504 计算几何
- uva 10173 Smallest Bounding Rectangle (计算几何-凸包)
- uva 10173 Smallest Bounding Rectangle (计算几何-凸包)
- 云计算解决方案当道 Power Cloud-Box价值几何?
- POJ2504 Bounding box
- POJ 计算几何(3)
- HDU4741【高数、计算几何】
- poj 1696 Space Ant(计算几何)
- POJ 2826 An Easy Problem 计算几何
- HUST 1584 摆放餐桌【计算几何】
- hdu 2105:The Center of Gravity(计算几何,求三角形重心)
- 计算几何之凸包
- 计算几何问题汇总--圆与矩形
- 南阳理工 题目3:多边形重心问题(计算几何,求多边形面积+重心)
- Lego Bricks [2011 浙江省赛I题] 计算几何
- Hdu 4617 Weapon (三维计算几何 异面直线距离)
- UVALive 3263 That Nice Euler Circuit 计算几何欧拉定理
- 51nod 1298:圆与三角形(计算几何)
- 【计算几何】POJ1039 Pipe