http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11353

 #include<iostream>
#include<stdio.h>
#include<string>
#include<math.h>
#define PI acos(-1)
//using namespace std;
struct Nod
{
int dir;
int len;
}node[];
struct Point
{
double x;
double y;
};
struct segmemt
{
Point s;
Point t;
};
double MAX(double a,double b)
{
if(a>b)return a;
return b;
}
double MIN(double a,double b)
{
if(a<b)return a;
return b;
}
double mulpti(Point ps , Point pe , Point p)
{
return (pe.x-ps.x)*(p.y-ps.y)-(p.x-ps.x)*(pe.y-ps.y);
}
bool inser(Point p1, Point p2 , Point p3, Point p4) //判断线段是否相交
{
if(MAX(p1.x,p2.x)>=MIN(p3.x,p4.x) &&
MAX(p3.x,p4.x)>=MIN(p1.x,p2.x) &&
MAX(p1.y,p2.y)>=MIN(p3.y,p4.y) &&
MAX(p3.y,p4.y)>=MIN(p1.y,p2.y) &&
mulpti(p1,p2,p3)*mulpti(p1,p2,p4)<= &&
mulpti(p3,p4,p1)*mulpti(p3,p4,p2)<=)
return true; //相交
else
return false; //不相交
} //得到向量的x坐标
double getX(double x,double y,int dir) //传入(x,y)向量以及角度dir
{
return x*cos(dir/180.0*PI)-y*sin(dir/180.0*PI);
}
//得到向量的y坐标
double getY(double x,double y,int dir)
{
return y*cos(dir/180.0*PI)+x*sin(dir/180.0*PI);
} int main()
{
int n;
segmemt list[];
while(~scanf("%d",&n)&&n)
{
int i;
double x,y,tx,ty;
for(i=;i<n;i++)
{
scanf("%d%d",&node[i].dir,&node[i].len);
if(node[i].dir<) node[i].dir=+node[i].dir;
}
list[].s.x=;
list[].s.y=;
x = getX(,,node[].dir);
y = getY(,,node[].dir);
list[].t.x = x*node[].len;
list[].t.y = y*node[].len;
for(i=;i<n;i++)
{
list[i].s.x = list[i-].t.x;
list[i].s.y = list[i-].t.y;
tx = x;
ty = y;
x = getX(tx,ty,node[i].dir);
y = getY(tx,ty,node[i].dir);
list[i].t.x = x*node[i].len + list[i].s.x;
list[i].t.y = y*node[i].len + list[i].s.y;
}
int j,flag=;
for(i=;i<n;i++)
{
for(j=;j<=i-;j++)
{
if(inser(list[j].s,list[j].t,list[i].s,list[i].t))
{
flag = ;
printf("%d\n",i+);
break;
}
}
if(flag) break;
}
if(!flag)
{
puts("SAFE");
}
}
return ;
}

Any Way You Slice It (向量旋转 以及 判断线段是否相交)(模板)的更多相关文章

  1. nyoj-1016-德莱联盟(向量叉乘判断线段相交)

    叉乘的坐标表示: A(X1,Y1), B(X2, Y2), C(XC,YC), D(XD, YD);AB = (X2-X1, Y2-Y1);CD = (XD-XC, YD-YC); 向量AB,CD的叉 ...

  2. 还记得高中的向量吗?leetcode 335. Self Crossing(判断线段相交)

    传统解法 题目来自 leetcode 335. Self Crossing. 题意非常简单,有一个点,一开始位于 (0, 0) 位置,然后有规律地往上,左,下,右方向移动一定的距离,判断是否会相交(s ...

  3. sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

    Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a b ...

  4. POJ-2991 Crane(区间更新+向量旋转)

    题目大意:n个向量首尾相连,每次操作使某个区间中的所有向量都旋转同样的角度.每次操作后都回答最后一个向量的坐标. 题目分析:区间维护向量信息.向量旋转:x1=x0*cos(t)-y0*sin(t),y ...

  5. 向量旋转 UPC 2217

    这道题目是13山东省省赛的签到题,题目大意是给等边三角形的两个定点,让求逆时针旋转之后的第三个点的坐标,原来不会向量的旋转,在网上找了找,找到一篇挺好的,直接贴过来. 向量的旋转 实际做题中我们可能会 ...

  6. HDU 1700 Points on Cycle (几何 向量旋转)

    http://acm.hdu.edu.cn/showproblem.php?pid=1700 题目大意: 二维平面,一个圆的圆心在原点上.给定圆上的一点A,求另外两点B,C,B.C在圆上,并且三角形A ...

  7. Uva 11178 Morley's Theorem 向量旋转+求直线交点

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=9 题意: Morlery定理是这样的:作三角形ABC每个 ...

  8. UVA 11178 /// 向量旋转 两向量夹角

    题目大意: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  9. 简单几何(向量旋转+凸包+多边形面积) UVA 10652 Board Wrapping

    题目传送门 题意:告诉若干个矩形的信息,问他们在凸多边形中所占的面积比例 分析:训练指南P272,矩形面积长*宽,只要计算出所有的点,用凸包后再求多边形面积.已知矩形的中心,向量在原点参考点再旋转,角 ...

随机推荐

  1. Python_sklearn机器学习库学习笔记(五)k-means(聚类)

    # K的选择:肘部法则 如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量.肘部法则会把不同 值的成本函数值画出来.随着 值的增大,平均畸变程度会减小:每个类包含的样本数会减少,于是样本 ...

  2. 【XMLRPC实现跨语言编程】Tcl <----> python

    转载请声明出处,谢谢合作. # 期望一种能实现tcl.python两者解释器能双向通讯的结合体# py->tcl: from Tkinter import Tcl; tcl = Tcl(); t ...

  3. iOS 视频开发-AVPlayer

    如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...

  4. JQuery合并列(可用于导出Word)

    在网上找了一些JQuery合并列的例子,但是都是用.hide()的方式,这样导致了在导出Word的时候表格严重变形 自己写了一个用.remove()方式的合并列 function arrangeTab ...

  5. HDOJ2009求数列的和

    求数列的和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. JAVA输入/输出系统中的其他流学习笔记

    一.字节数组流 字节数组流类能够操作内存中的字节数组,它的数据是一个字节数组.字节数组流类本身适配器设计模式,它把字节数组类型转为流类型使得程序能够对字节数组进行读写操作. 1.ByteArrayIn ...

  7. 20141014--判断语句switch case

    1. switch case break(跳出) 距离break 最近的大括号,跳出这个大括号,执行大括号之后的命令 switch case 必须与 break 一同使用. 分别输入月份 几号 输出是 ...

  8. [WCF]IIS部署到新系统

    最近为以前的一个企业部署软件的时候,接触到WCF,通过博客园大佬的系列文章和一些书籍,基本了解了一些.简单说也算是SOA一种方式,提供某种服务,可以理解为一个类库,供其他项目使用,可以做到业务分离.但 ...

  9. 【转载】应广大群众的要求,今天开始连载《超容易的Linux系统管理入门书》一书

    学习Linux容易嘛?我说超容易,你肯定不信.那学习Linux最好的学习方法是什么,就是脑子里面一直提问题,不停的提,时时刻刻提,如果你没有问题,那再容易的学习书你也看不懂. <超容易的Linu ...

  10. 3月3日(3) Binary Tree Preorder Traversal

    原题 Binary Tree Preorder Traversal 没什么好说的... 二叉树的前序遍历,当然如果我一样忘记了什么是前序遍历的..  啊啊.. 总之,前序.中序.后序,是按照根的位置来 ...