http://acm.hdu.edu.cn/showproblem.php?pid=3320
棰樻剰錛?br /> 緇欏畾(x,y,z) 鐒跺悗3涓彉鎹€傛眰鏈鍚庣殑緇撴灉銆?br /> 鍒濆鐨?x,y,z)鏈鍚庣粰鍑猴紝鍙樻崲鐨勯『搴忕敱鍚庡線鍓嶃?br />
鎴戦噰鍙栫殑鏄粠鍚庡線鍓嶅仛鐨勩傝繕鍙互浣跨敤鐭╅樀榪愮畻錛屼粠鍓嶅線鍚庯紝鍙充箻鍝︺?nbsp; 鍙傝冿細(xì)http://fayaa.com/code/view/9510/
榪樻湁灝辨槸鏁版嵁鐨勮鍏?sscanf()鏄釜濂戒笢瑗垮憖錛屽搱鍝堛?br />
鎬葷粨錛?br /> 鏁板寰堥噸瑕佸晩錛?br />

#include<stdio.h>
#include<string.h>
#include<math.h>
struct tra{
char cm;
double w;
double x,y,z;
} p[104];
char ch[125];
int main()
{
int t;
int n;
int i,j,k;
scanf("%d",&t);
getchar();
while (t--)
{
gets(ch);
n=0;
while (gets(ch)&&ch[2]!='E')
{
n++;
char s[125];
memset(s,0,sizeof(s));
if (ch[2]=='R')
{
p[n].cm=ch[2];
i=0;
while (ch[i]!='(') i++;
k=i+1;
while (ch[i]!=')') i++;
j=i-1;
for (i=k;i<=j;i++)
s[i-k]=ch[i];
// puts(s);
sscanf(s,"%lf,%lf,%lf,%lf",&p[n].w,&p[n].x,&p[n].y,&p[n].z);
}
else
{
i=0;
while (ch[i]!='(') i++;
k=i+1;
while (ch[i]!=')') i++;
j=i-1;
for (i=k;i<=j;i++)
s[i-k]=ch[i];
// puts(s);
p[n].cm=ch[2];
sscanf(s,"%lf,%lf,%lf",&p[n].x,&p[n].y,&p[n].z);
}
}
// for (i=n;i>=1;i--)
// printf("%c %lf %lf %lf %lf\n",p[i].cm,p[i].w,p[i].x,p[i].y,p[i].z);
double x,y,z;
// x=p[n].z,y=p[n].y,z=p[n].z;
for (i=n;i>=1;i--)
{
char c=p[i].cm;
if (c=='V')
x=p[i].x,y=p[i].y,z=p[i].z;
else
if (c=='S')
x *=p[i].x,y *=p[i].y,z *=p[i].z;
else
if (c=='T')
x +=p[i].x,y +=p[i].y,z +=p[i].z;
else
{
double si=sin(p[i].w),co=cos(p[i].w);
double m=sqrt(p[i].x*p[i].x+p[i].y*p[i].y+p[i].z*p[i].z);
double x1,y1,z1;
double x2,y2,z2;
x1=p[i].x/m;y1=p[i].y/m;z1=p[i].z/m;
x2=(x1 * x1 * (1 - co) + co)*x+ (x1 * y1 * (1 - co) - z1 * si)*y+ (x1 * z1 * (1 - co) + y1 * si)*z;
y2=(y1 * x1 * (1 - co) + z1 * si)*x+ (y1 * y1 * (1 - co) + co)*y+ (y1 * z1 * (1 - co) - x1 * si)*z;
z2=(x1 * z1 * (1 - co) - y1 * si)*x+ (y1 * z1 * (1 - co) + x1 * si)*y+ (z1 * z1 * (1 - co) + co)*z;
x=x2;y=y2;z=z2;
}
}
printf("%.1lf %.1lf %.1lf\n",x,y,z);
}
return 0;
}

]]>