题目大意:有一个正N边形,然后给出两个点,求出剩余的点的坐标。

分析:向量旋转可以求出坐标,顺时针旋转时候,x = x'*cos(a) + y'*sin(a), y=-x'*sin(a) + y'*cos(a), 逆时针时候 x = x'*cos(a)-y'*sin(a), y=x'*sin(a)+y'*cos(a)。题目中先求出来圆心,然后再求剩余的点,不过求圆心的时候一定注意判断一下两点的角度是否大于PI。

代码如下:

==========================================================================================================

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std; const int MAXN = ;
const double PI = acos(-1.0);
const double EPS = 1e-; struct point
{
double x, y;
point(double x=, double y=):x(x),y(y){}
point operator - (const point &tmp)const{
return point(x-tmp.x, y-tmp.y);
}
double operator *(const point &tmp)const{
return x*tmp.x+y*tmp.y;
}
};
double Dis(point a, point b)
{
return sqrt((a-b)*(a-b));
}
struct segment
{
point s, e;
segment(point s=, point e=):s(s),e(e){} point Turn(double len, double a)
{///线段绕点s旋转a角度后长len的坐标,顺时针
point t = e-s, ans;
double len1 = Dis(s, e);
/// printf("sin(a)=%lf, cos(a)=%lf\n", sin(a), cos(a));
ans.x = s.x + (t.y*sin(a)+t.x*cos(a))*len/len1;
ans.y = s.y + (-t.x*sin(a)+t.y*cos(a))*len/len1; return ans;
}
}; int main()
{
point p[MAXN];
int N, A, B;
scanf("%d%d%d", &N, &A, &B);
A-= , B-=;
scanf("%lf%lf%lf%lf", &p[A].x, &p[A].y, &p[B].x, &p[B].y); if(A > B)swap(A, B); double a, b, R;
segment L; if(B-A >= N/)
{///夹角大于PI
a = PI * / N;
b = PI/ - a * (N-(B-A)) / ;
L.s = p[B], L.e = p[A];
}
else
{
a = PI * / N;
b = PI/ - a * (B-A) / ;
L.s = p[A], L.e = p[B];
} R = Dis(L.s, L.e) / / cos(b);
point heart = L.Turn(R, b); L.s = heart; for(int i=; i<N; i++)
{
L.e = p[(A+i)%N];
p[(A+i+)%N] = L.Turn(R, a);
} for(int i=; i<N; i++)
{
if(fabs(p[i].x) <= EPS)p[i].x = EPS;
if(fabs(p[i].y) <= EPS)p[i].y = EPS;
printf("%.6f %.6f\n", p[i].x+1e-, p[i].y+1e-);
} return ;
}

Archipelago - SGU 120(计算几何向量旋转)的更多相关文章

  1. SGU 120 Archipelago (简单几何)

    120. Archipelago time limit per test: 0.25 sec.  memory limit per test: 4096 KB Archipelago Ber-Isla ...

  2. ACM 计算几何向量

    向量 简介注意事项基本计算 加减法 ~ 示例代码 长度 ~ 示例代码 数乘 ~ 示例代码 点积 应用 ~ 示例代码 叉积 ~ 示例代码 性质与应用 经典题目 向量旋转 操作目的 模板代码 简介 向量, ...

  3. 今日SGU 5.26

    #include<bits/stdc++.h> #define de(x) cout<<#x<<"="<<x<<endl ...

  4. canvas 图片拖拽旋转之一——坐标转换translate

    引言 对canvas中绘制的图片进行旋转操作,需要使用ctx.translate变换坐标系,将图片旋转的基点设为坐标系的原点,然后ctx.rotate旋转. 这个时候,因为canvas坐标系发生了旋转 ...

  5. iOS开发——UI进阶篇(十八)核心动画小例子,转盘(裁剪图片、自定义按钮、旋转)图片折叠、音量震动条、倒影、粒子效果

    一.转盘(裁剪图片.自定义按钮.旋转) 1.裁剪图片 将一张大图片裁剪为多张 // CGImageCreateWithImageInRect:用来裁剪图片 // image:需要裁剪的图片 // re ...

  6. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

  7. Unity脚本-Rotate旋转相关知识点

    1,Transform旋转   transform.Rotate(X, Y, Z);//分别绕X,Y,Z轴旋转,可写为绕某个轴旋转,栗子transform.Rotate(0, 90, 0);   tr ...

  8. unity2D以最小的角度旋转到目标方向(y方向为角色的主方向)

    一.使用向量原理转换到目标方向 为了让角色的自身y转向目标方向,并且以最小角度旋转,要点是获得当前方向与目标方向的叉值,从而判断应该旋转的方向 float rotateSpeed; //相对目标位置运 ...

  9. PCB 合拼遍历(全排序+旋转90度) 基本遍历方法

    分享一下PCB合拼的组合的遍历方法,在分享之前先纠正一下 PCB拼板之多款矩形排样算法实现--学习  时间复杂度计算错误  一.PCB 合拼(全排序+旋转90度)的时间复杂度是多少? 二.合拼遍历(全 ...

随机推荐

  1. OC - 15.NSURLSession与NSURLSessionTask

    简介 NSURLSession也能完成网络请求 NSURLConnection在iOS9中不推荐使用,NSURLSession是iOS9中推荐使用的网络请求方式 NSURLSession需要与NSUR ...

  2. iOS Core Animation学习总结(1)--CALayer常用属性

    图层是core animation的基础, UIView之所以能显示在屏幕上,靠的是其内部的这个图层,即每个UIView 都有 CALayer,可通过UIView.layer或者[UIView lay ...

  3. 从1到n整数中1出现的次数

    题目如题 如 5 中1出现的次数 为1 12中1出现的次数为5 public class NumberOf1Between1AndN { /* *输入一个整数n,求从1到n这N个十进制表示中1出现的次 ...

  4. React Native:使用 JavaScript 构建原生应用 详细剖析

    数月前,Facebook 对外宣布了正在开发的 React Native 框架,这个框架允许你使用 JavaScript 开发原生的 iOS 应用——就在今天,Beta 版的仓库释出了! 基于 Pho ...

  5. double类型字符串转换成一个纯数字字符串和一个小数点位数的c++代码

    今天工作中遇到一个要不一个double型的字符串转换成一个纯字数字符串和一个标志这个数字字符串的小数点有几位的int类型 例如:“23.123”--->“23123” + 3   比较简单.就是 ...

  6. Django设置TIME_ZONE和LANGUAGE_CODE为中国区域

    Django默认的timezone是 TIME_ZONE = 'America/Chicago' LANGUAGE_CODE = 'en-us' 设置为中国区域: TIME_ZONE = 'Asia/ ...

  7. 需求分析Point

    1.码段的查询结果的汇总值计算有问题.被删除的是否还算是被使用范围内呢?现在是即使废弃了也算使用的.这就有范围和重叠的问题,需要识别这种集合关系的数据好概念,并搞清楚他们的关系和概念.

  8. Axure RP的版本控制

    首先介绍一下Axure RP,Axure的发音是Ask-Sure,RP是Rapid Prototype的缩写,写到这里你知道了这是一款原型绘画工具.本节主要介绍Axure RP的版本管理也即Axure ...

  9. 关于Kingfisher--备用

    序言--感谢好心大神分享 Kingfisher 是由 @onevcat 编写的用于下载和缓存网络图片的轻量级Swift工具库,其中涉及到了包括GCD.Swift高级语法.缓存.硬盘读写.网络编程.图像 ...

  10. 编译hadoop版的hello,world

    cd ~/src mkdir classes javac -classpath ~/hadoop-/hadoop--core.jar WordCount.java -d classes jar -cv ...