• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ArcTan

            dfs
            隨筆 - 16, 文章 - 117, 評(píng)論 - 6, 引用 - 0
            數(shù)據(jù)加載中……

            hdu 3320 openGL(空間變換+矩陣變換)

            http://acm.hdu.edu.cn/showproblem.php?pid=3320

            題意:
                  給定(x,y,z) 然后3個(gè)變換。求最后的結(jié)果。
                  初始的(x,y,z)最后給出,變換的順序由后往前。

            我采取的是從后往前做的。還可以使用矩陣運(yùn)算,從前往后,右乘哦。      參考:http://fayaa.com/code/view/9510/

            還有就是數(shù)據(jù)的讀入 sscanf()是個(gè)好東西呀,哈哈。

            總結(jié):
                  數(shù)學(xué)很重要??!


            #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;
            }



                  

            posted on 2012-07-15 13:09 wangs 閱讀(285) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ACM-計(jì)算幾何

            国产成人精品久久| 亚洲日本久久久午夜精品| 色婷婷久久综合中文久久一本| 99热都是精品久久久久久| 日本久久久久久中文字幕| 久久久久久无码国产精品中文字幕| 久久久久噜噜噜亚洲熟女综合| 国产亚州精品女人久久久久久| 一本久道久久综合狠狠爱| 久久综合九色综合网站| 99精品久久久久久久婷婷| 久久精品中文字幕大胸| 国产成人久久激情91| 久久精品国产亚洲αv忘忧草 | 久久福利片| 久久99精品国产麻豆宅宅| 97精品久久天干天天天按摩 | 亚洲欧美日韩精品久久亚洲区| 日本欧美久久久久免费播放网| 91久久婷婷国产综合精品青草| 亚洲?V乱码久久精品蜜桃| 久久精品国产亚洲77777| 午夜精品久久久久久中宇| 婷婷国产天堂久久综合五月| 精品久久香蕉国产线看观看亚洲| 色综合久久久久无码专区| 一本久久久久久久| 久久亚洲欧美国产精品| 国产亚洲精品久久久久秋霞| 精品久久久久久99人妻| 97久久综合精品久久久综合| 国产精品久久久久a影院| 久久久久久久精品成人热色戒| 一本大道加勒比久久综合| a高清免费毛片久久| 久久久久久久亚洲Av无码| 久久久久亚洲av成人网人人软件| 亚洲国产日韩欧美久久| 久久久久久亚洲精品无码| 色婷婷久久综合中文久久一本| 国产成人精品久久一区二区三区av|