描述

The Archeologists of the Current Millenium (ACM) now and then discover ancient artifacts located at vertices of regular polygons. The moving sand dunes of the desert render the excavations difficult and thus once three vertices of a polygon are discovered there is a need to cover the entire polygon with protective fabric.

输入

Input contains multiple cases. Each case describes one polygon. It starts with an integer n <= 50, the number of vertices in the polygon, followed by three pairs of real numbers giving the x and y coordinates of three vertices of the polygon. The numbers are separated by whitespace. The input ends with a n equal 0, this case should not be processed.

输出

For each line of input, output one line in the format shown below, giving the smallest area of a rectangle which can cover all the vertices of the polygon and whose sides are parallel to the x and y axes.

样例输入

4
10.00000 0.00000
0.00000 -10.00000
-10.00000 0.00000
6
22.23086 0.42320
-4.87328 11.92822
1.76914 27.57680
23
156.71567 -13.63236
139.03195 -22.04236
137.96925 -11.70517
0

样例输出

Polygon 1: 400.000
Polygon 2: 1056.172
Polygon 3: 397.673

题意

已知正n边形三点求最小矩形覆盖面积

题解

正n边形上三点,求出正n边形上唯一外接圆

顺时针绕圆心旋转圆心角得到每个顶点的坐标

然后答案就是(最大的x-最小的x)*(最大的y-最小的y)

代码

 #include<bits/stdc++.h>
using namespace std; struct Point
{
double x,y;
Point(double x=,double y=):x(x),y(y){}
};
Point tcircle(Point pt1,Point pt2,Point pt3,double &radius)
{
double x1=pt1.x,x2=pt2.x,x3=pt3.x;
double y1=pt1.y,y2 =pt2.y,y3=pt3.y;
double a=x1-x2,b=y1-y2,c=x1-x3,d=y1-y3;
double e=((x1*x1-x2*x2)+(y1*y1-y2*y2))/2.0;
double f=((x1*x1-x3*x3)+(y1*y1-y3*y3))/2.0;
double det=b*c-a*d;
double x0=(b*f-d*e)/det;
double y0=(c*e-a*f)/det;
radius=hypot(x1-x0,y1-y0);
return Point(x0,y0);
}
Point rotateShun(Point p,Point dx,double selt)
{
double xx=(p.x-dx.x)*cos(-selt)-(p.y-dx.y)*sin(-selt)+dx.x;
double yy=(p.x-dx.x)*sin(-selt)+(p.y-dx.y)*cos(-selt)+dx.y;
return Point(xx,yy);
}
Point p[];
int main()
{
int n,ca=;
double PI=acos(-);
while(scanf("%d",&n),n)
{
for(int i=;i<=;i++)
scanf("%lf%lf",&p[i].x,&p[i].y);
double r=.;
Point cir=tcircle(p[],p[],p[],r);
double selt=.*PI/n;
double maxx=p[].x,minx=p[].x,maxy=p[].y,miny=p[].y;
for(int i=;i<=n;i++)
{
p[i]=rotateShun(p[i-],cir,selt);
maxx=max(maxx,p[i].x);
minx=min(minx,p[i].x);
maxy=max(maxy,p[i].y);
miny=min(miny,p[i].y);
}
double ans=(maxx-minx)*(maxy-miny);
printf("Polygon %d: %.3f\n",ca++,ans);
}
return ;
}

TZOJ 2392 Bounding box(正n边形三点求最小矩形覆盖面积)的更多相关文章

  1. 论文阅读笔记四十七:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression(CVPR2019)

    论文原址:https://arxiv.org/pdf/1902.09630.pdf github:https://github.com/generalized-iou 摘要 在目标检测的评测体系中,I ...

  2. 3D空间中的AABB(轴向平行包围盒, Aixe align bounding box)的求法

    引言 在前面的一篇文章中讲述了怎样通过模型的顶点来求的模型的包围球,而且还讲述了基本包围体除了包围球之外,还有AABB包围盒.在这一章,将讲述怎样依据模型的坐标求得它的AABB盒. 表示方法 AABB ...

  3. Latex 中插入图片no bounding box 解决方案

    在windows下,用latex插入格式为jpg,png等图片会出现no bounding box 的编译错误,此时有两个解决办法: 1.将图片转换为eps格式的图片 \usepackage{grap ...

  4. bounding box的简单理解

    1. 小吐槽 OverFeat是我看的第一篇深度学习目标检测paper,因为它是第一次用深度学习来做定位.目标检测问题.可是,很难懂...那个bounding box写得也太简单了吧.虽然,很努力地想 ...

  5. 第二十六节,滑动窗口和 Bounding Box 预测

    上节,我们学习了如何通过卷积网络实现滑动窗口对象检测算法,但效率很低.这节我们讲讲如何在卷积层上应用这个算法. 为了构建滑动窗口的卷积应用,首先要知道如何把神经网络的全连接层转化成卷积层.我们先讲解这 ...

  6. maya cmds pymel polyEvaluate 获取 bounding box

    maya cmds pymel polyEvaluate 获取 bounding box cmds.polyEvaluate(bc = 1)   #模型 cmds.polyEvaluate(bc2 = ...

  7. Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box)

    Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box) function DecideOberlap(BBox_x1, BBox_y1, BBox_x2, ...

  8. elasticsearch Geo Bounding Box Query

    Geo Bounding Box Query 一种查询,允许根据一个点位置过滤命中,使用一个边界框.假设以下索引文档: PUT /my_locations { "mappings" ...

  9. 两个Bounding Box的IOU计算代码

    Bounding Box的数据结构为(xmin,ymin,xmax,ymax) 输入:box1,box2 输出:IOU值 import numpy as np def iou(box1,box2): ...

随机推荐

  1. laravel-admin挖坑之旅

    1.git-bash下使用命令php artisan admin:make UserController --model=App\User会报错Model does not exists 要加多一个“ ...

  2. 关于anaconda中jupyter notebook错误

    anaconda这个软件是真的坑,其中的jupyter notebook每次都会出错,不知道,为什么,可惜我的pycharm装tensorflow一直有错误,不然,真想卸了这个软件. 会莫名其妙闪退, ...

  3. 序列化模块_pickle

    序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...

  4. [WebService].net中WebService的使用实例

    .net中WebService的使用实例 一.创建一个Webwebservice 1.新建一个项目WebserverDemo 2.在项目处添加新建项,添加一个web服务 3.编辑TestServer. ...

  5. tomcat7启动闪退

    今天电脑重装了系统,下载解压tomcat发现startup.bat打开就闪退.不知道咋回事,打开windows命令输入cmd->cd 进入到tomcat的bin目录,输入startup.exe回 ...

  6. winserver2012 下安装 sqlserver2008

    sqlserver2008 安装要求 winserver2012 必须装 .netframework3.5. 但是 winserver2012下,安装 .netframework3.5 ,必须要 wi ...

  7. db powerdesign CDM、LDM、PDM、OOM的区别

        导读 在本篇文章中,你将会了解到PowerDesigner工具中的三种模型CDM,OOM,PDM的区别和联系. PowerDesigner 简称PD,是一种数据建模工具,适合于开发大型应用系统 ...

  8. python基础内容目录

    一  python基础 二  python基础数据类型 三  python文件操作及函数初识 四  python函数进阶 五  python装饰器 六  python迭代器与生成器 七  python ...

  9. 用Itextsharp 组件导出PDF 的文档的方法

    Itextsharp 是一个很强大,开源的,轻量级的 PDF 生成组件,官方网上好像没有相应的API 说明文档,以下是在工作中使用的心得与体会,并附上源码,功能包含了pdf 的创建,table 的创建 ...

  10. Python爬虫简单介绍

    相关环境: Python3 requests库 BeautifulSoup库 一.requests库简单使用 简单获取一个网页的源代码: import requests sessions = requ ...