#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#define N (10010<<2)
#define maxn 10000
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pi acos(-1.0) int ang[N];
double x[N],y[N],len[maxn+]; void Rotate(int rt,double rad)
{
double s=x[rt],t=y[rt];
x[rt]=s*cos(rad)-t*sin(rad);
y[rt]=s*sin(rad)+t*cos(rad);
} double getrad(double x)
{
return x*pi/180.0;
} void PushDown(int rt)
{
if(ang[rt])
{
ang[rt<<]+=ang[rt];
ang[rt<<|]+=ang[rt];
double rad=getrad(ang[rt]);
ang[rt]=;
Rotate(rt<<,rad);
Rotate(rt<<|,rad);
}
} void PushUp(int rt)
{
x[rt]=x[rt<<]+x[rt<<|];
y[rt]=y[rt<<]+y[rt<<|];
} void build(int l,int r,int rt)
{
ang[rt]=;
if(l==r)
{
x[rt]=;
y[rt]=len[l];
return ;
}
int m=(l+r)>>;
build(lson);
build(rson);
PushUp(rt);
} void update(int p,int del,int l,int r,int rt)
{
if(l==r)
{
double rad=getrad(del);
Rotate(rt,rad);
return;
}
int m=(l+r)>>;
PushDown(rt);
if(p<=m)
{
double rad=getrad(del);
update(p,del,lson);
Rotate(rt<<|,rad);
ang[rt<<|]+=del;
}
else
update(p,del,rson);
PushUp(rt);
} int main(void)
{
int n,q;
int flag=;
int index,degree[maxn+],d;
while(~scanf("%d%d",&n,&q))
{
memset(degree,,sizeof(degree));
memset(ang,,sizeof(ang));/*旋转角度初始化为0,也就是一开始不旋转,这一步也可以放在build函数里面进行,不能遗漏*/
if(flag) puts("");
else flag=;
for(int i=; i<=n; i++)
scanf("%lf",len+i);
build(,n,);
while(q--)
{
scanf("%d%d",&index,&d);
d-=;
index++;/*index要先增加,然后再和degree[intdex]求旋转角度*/
int delta=d-degree[index];
degree[index]=d;
update(index,delta,,n,);
printf("%.2f %.2f\n",x[],y[]);
}
}
return ;
}

关于Rotae函数是这样理解的,更新时表示index+1段之后的线段绕index段末端点旋转delta度,x,y分别对应index+1之后的线段在x轴,y轴上投影。
根据x'=x*cos(rad)-y*sin(rad),y'=x*sin(rad)+y*cos(rad)可以将旋转后的投影算出来。

poj crane的更多相关文章

  1. POJ 2991 Crane(线段树+计算几何)

    POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...

  2. (中等) POJ 2991 Crane , 几何+线段树。

    Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...

  3. POJ 2991 Crane(线段树)

    Crane Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7687   Accepted: 2075   Special J ...

  4. POJ 2991 Crane (线段树)

    题目链接 Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of v ...

  5. AC日记——Crane poj 2991

    POJ - 2991 思路: 向量旋转: 代码: #include <cmath> #include <cstdio> #include <cstring> #in ...

  6. POJ - 2991 Crane (段树+计算几何)

    Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...

  7. POJ 2991–Crane【线段树+几何】

    题意: 把手臂都各自看成一个向量,则机械手的位置正好是手臂向量之和.旋转某个关节,其实就是把关节到机械手之间的手臂向量统统旋转. 由于手臂很多,要每个向量做相同的旋转操作很费时间.这时就可以想到用线段 ...

  8. [poj 2991]Crane[线段树表示向量之和,而非数量]

    题意: 起重机的机械臂, 由n段组成, 对某一些连接点进行旋转, 询问每次操作后的末端坐标. 思路: 由于旋转会影响到该点之后所有线段的角度, 因此容易想到用线段树记录角度, 成段更新. (但是不是每 ...

  9. POJ 2991 Crane

    线段树+计算几何,区间更新,区间求和,向量旋转. /* *********************************************** Author :Zhou Zhentao Ema ...

随机推荐

  1. day-4

    /* 早上黑板上的倒计时变成了120小时 嗯 很快就要结束了 上午考试 据老师说很简单 老师 :"我就说说~"..... 下午改题 T3好辣脑子 感觉智商不够了 T2dp写丑了 然 ...

  2. sql2012 新增 OFFSET/FETCH

    SQL Server 对行数的排序提供了 TOP 筛选.SQL Server 2012 新增了 OFFSET 筛选. 一.TOP 筛选 如果有 ORDER BY 子句,TOP 筛选将根据排序的结果返回 ...

  3. 异步任务(AsyncTask)

    Android的UI线程主要负责处理用户的按键事件.用户触屏事件及屏幕绘图事件等,因此开发者的其他操作不应该.也不能阻塞UI线程,否则UI界面将会变得停止响应——用户感觉非常糟糕.(总之,开发者需要牢 ...

  4. 启用aspnet

    1. 进入dotnetfw目录 cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 2. aspnet_regiis -i -enable

  5. JQuery Jplayer play无效的问题

    最近折腾个H5. 用到Jplayer, 用着不错,至少兼容性强一些. 但是安卓这辆公共汽车型号实在太多.不小心上了一辆奇葩的就容易震到生活不能自理. 我在一台手机上的五六个浏览器上测试,都可以. 把该 ...

  6. JS中的replace方法以及与正则表达式的结合应用

    replace方法的语法是:stringobj.replace(rgexp, replacetext) 其中stringobj是字符串(string),reexp可以是正则表达式对象(regexp)也 ...

  7. No application 'meetme' for extension 错误

    在asterisk中搭建简单会议室,在extensions.conf中执行到 exten => 18,n,MeetMe(18,p) asterisk控制台提示:Aug 6 8:28:41 WAR ...

  8. c# 串口发送接收数据

    /********************** 串口数据接收事件 *****************************/ private void SerialPort_DataReceived ...

  9. jeesite 经常出现java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL解决思路

    本来jeesite是用的maven,但是我开发的项目用这个框架没用maven, 经常报这个错,我能用的办法就是将springmvc—web.jar包删掉,然后重新添加

  10. OpenCV(7)-图像直方图

    直方图定义可参考这里.图像的直方图用来表示图像像素的统计信息,它统计了图像每一个通道(如果是多通道)中,每个像素的个数(比例). 计算直方图 OpenCV提供了直接计算直方图的函数 void calc ...