sgu 120
来源:互联网 发布:康得新裸眼3d知乎 编辑:程序博客网 时间:2024/04/29 23:46
sgu120
题意:给出正
首先要知道
向量
有这样一个关系>
证明:
记
有>
而>
推得>
解法:
套公式,列方程,解出正
然后用向量解出其他每个点的坐标
因为是保留6位小数,所以还要特判 -0.000000 的情况
计算几何就是。。。唉不说了,说起来满满都是泪
#include<stdio.h>#include<stdlib.h>#include<math.h>#define eps 0.0000001struct node{double x,y;int s;}n1,n2,f,f1,ans;int n;double p,q;double pi;double a,b;int main(){ int i; #ifndef ONLINE_JUDGE freopen("sgu120.in","r",stdin); freopen("sgu120.out","w",stdout); #endif scanf("%d%d%d",&n,&n1.s,&n2.s); scanf("%lf%lf",&n1.x,&n1.y); scanf("%lf%lf",&n2.x,&n2.y); pi=acos(-1); a=((double)n2.s-n1.s)/n*pi*2; p=n1.x-n2.x*cos(a)+n2.y*sin(a); q=n1.y-n2.x*sin(a)-n2.y*cos(a); f.x=(p*((double)1-cos(a))-q*sin(a))/((double)1-cos(a))/2; f.y=(p*sin(a)+q*((double)1-cos(a)))/((double)1-cos(a))/2; b=((double)n1.s-1)/n*pi*2; f1.x=(n1.x-f.x)*cos(b)-(n1.y-f.y)*sin(b); f1.y=(n1.x-f.x)*sin(b)+(n1.y-f.y)*cos(b); for(i=1;i<=n;i++) { b=((double)1-i)/n*pi*2; ans.x=f1.x*cos(b)-f1.y*sin(b)+f.x; ans.y=f1.x*sin(b)+f1.y*cos(b)+f.y; if(fabs(ans.x)<eps) printf("0.000000 "); else printf("%.6lf ",ans.x); if(fabs(ans.y)<eps) printf("0.000000\n"); else printf("%.6lf\n",ans.y); } #ifndef ONLINE_JUDGE fclose(stdin); fclose(stdout); #endif return 0;}
话说这编辑器真好玩^_^
0 0
- sgu 120
- sgu 120
- sgu 120
- sgu 120 Archipelago
- SGU 101 - 120小结
- SGU
- SGU
- SGU
- SGU
- SGU
- SGU
- (SGU
- SGU
- SGU
- SGU
- SGU
- SGU
- SGU
- 请手动释放你的资源(Please release resources manually)
- 0110 领域模型管理与AOP【高级】
- linux下iftop安装使用
- HTTPS 基本原理
- 三层总结
- sgu 120
- 编程题-最小向量内积-(1)
- 如何实现泛型<T>带参数实例化
- linux Ext4 s_flex_groups
- IIS中的 MIME类型 HTTP 错误 404 - 文件或目录未找到。
- 使用commons-email-1.3.2.jar包发送邮件
- 经典排序算法 – 插入排序Insertion sort
- Python根据数量生成正确顺序的ip地址
- 打造一个精简的BaseActivity