POJ 2194 2850 计算几何
2024-09-30 20:36:48
题意:
给你了n个圆,让你摞起来,问顶层圆心的坐标
(数据保证间隔两层的圆不会挨着)
思路:
按照题意模拟。
假设我们已经知道了一层两个相邻圆的坐标a:(x1,y1)和b:(x2,y2)
很容易求出来边长是2,2,dis(a,b)的三角形的面积
进而求出来底面所对应的高
找到底面中点
讲a->b 向量旋转90度 乘上高度
就搞出来了坐标
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int cases,n;
typedef double db;
struct P{db x,y;P(){}P(db X,db Y){x=X,y=Y;}}p[][];
bool operator<(P a,P b){return a.x<b.x;}
P operator-(P a,P b){return P(a.x-b.x,a.y-b.y);}
P operator+(P a,P b){return P(a.x+b.x,a.y+b.y);}
db dis(P a){return sqrt(a.x*a.x+a.y*a.y);}
P get(P a,P b){
P c=b-a;db d=dis(c),p=d/+,S=sqrt(p*(p-)*(p-)*(p-d)),h=S/d*;
c.x/=d,c.y/=d;c=P(-c.y*h,c.x*h);
return P((a.x+b.x)/+c.x,(a.y+b.y)/+c.y);
}
int main(){
while(scanf("%d",&n)&&n){
for(int i=;i<=n;i++)scanf("%lf",&p[n][i].x),p[n][i].y=;
sort(p[n]+,p[n]++n);
for(int i=n-;i;i--)
for(int j=;j<=i;j++)
p[i][j]=get(p[i+][j],p[i+][j+]);
printf("%.4lf %.4lf\n",p[][].x,p[][].y);
}
}
最新文章
- hdu 5534 (完全背包) Partial Tree
- 使用Spring注解来简化ssh框架的代码编写
- python 环境安装
- HDU 1176 免费馅饼
- Drainage Ditches
- 希赛网 >; 问答 >; 数据库 >; MySQL数据库 >; MySQL的管理与维护 >; MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO&#39;root&#39;@&#39;%&#39;I MySql开启远程用户登录GRANTALLPRIVILEGESON*.*TO&#39;root&#39;@&#39;%&#39;I
- 【和我一起学python吧】初学Python,版本如何选择?
- UITableView实现格瓦拉飞天投票模块-b
- 《算法:C语言实现》阅读笔记
- 《Intel汇编第5版》 数组求和
- hdu2571 命运 简单DP
- SNMP相关的RFC建议和链接
- 学习笔记_J2EE_Spring(一)_入门
- MySQL安装脚本0104-亲试ok
- ubuntu10.04 搭建海思开发环境
- extJS 动态引用加载(转)
- An enumerable sequence of parameters (arrays, lists, etc) is not allo
- JAVA代码中最常见到的关键字表
- Ubuntu下从外网上北邮人BT
- 有关于mfc webbrowser插件的使用