描述

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. springboot项目如何打包成war包

    一.修改打包形式 在pom.xml里设置 <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring-boot-s ...

  2. IDEA注册码分享

    IntelliJ IDEA IDEA 2018 激活注册码分享鼠标连续 三下左键点击 选中,再Ctrl+C 即可复制. CSDN在末尾会带上博客的说明,请删除后,复制到 IDEA中激活. 注册码激活: ...

  3. ibatis.net 循环

    if (oReqV[0]["tag"] != null && !string.IsNullOrEmpty(oReqV[0]["tag"].ToS ...

  4. python中的函数参数的传递

    转载自: http://winterttr.me/2015/10/24/python-passing-arguments-as-value-or-reference/ 我想,这个标题或许是很多初学者的 ...

  5. 事务回滚 SET XACT_ABORT ON

    USE tempdb IF OBJECT_ID ('dbo.test') IS NOT NULL DROP TABLE dbo.test GO CREATE TABLE dbo.test ( id I ...

  6. CDNI - RFC 6707 翻译

    CDNI的相关问题陈述 概述 CDN对可缓存内容提供了许多好处:降低交付成本,提高终端用户体验,提高交付的鲁棒性.对于这些因素,CDN常 用于大规模的内容交付.因此,现有的CDN提供商正在扩大规模,许 ...

  7. 【原创】Windows上应用程序报错常用分析方法总结

    在日常使用Windows的过程中,经常会遇到应用程序不能正常启动.关闭等使用问题.对于Windows来说,解决这些问题的方法比较多,大多时候我们可以通过百度或谷歌搜索来解决.但更多的时候,我们需要找出 ...

  8. Kafka connect in practice(3): distributed mode mysql binlog ->kafka->hive

    In the previous post Kafka connect in practice(1): standalone, I have introduced about the basics of ...

  9. Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程)

    Android studio3.0打开Device File Explore(文件管理器)的方法(图文教程) 看到网上AS3.0新增加的查看手机文件的新功能,全部都是转载的,没有几个人心细的把如何打开 ...

  10. 通过SID查找历史执行的SQL语句

    这次某系统发生严重的阻塞,但是去查顶级会话,发现已经没有该对应的sql_id了,于是我们只用通过 v$active_session_history 视图来寻找.下面是查找的过程: 1.查找顶层ASH历 ...