• <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ì)算幾何

            av午夜福利一片免费看久久| 欧美日韩精品久久久免费观看| 99精品国产99久久久久久97| 综合人妻久久一区二区精品| 日产精品久久久久久久| 国产AⅤ精品一区二区三区久久| 久久www免费人成看国产片| 久久久久久久波多野结衣高潮 | AV无码久久久久不卡蜜桃| 成人久久综合网| 武侠古典久久婷婷狼人伊人| 久久精品无码专区免费青青| 久久久亚洲精品蜜桃臀| 久久精品国产亚洲av麻豆色欲| 天堂无码久久综合东京热| 亚洲国产精品久久久久婷婷老年| 久久妇女高潮几次MBA| 精品久久人人妻人人做精品| 久久99精品久久久久婷婷| 亚洲午夜福利精品久久| 精品久久综合1区2区3区激情 | 亚洲国产成人久久精品99| 久久久噜噜噜www成人网| 欧美精品乱码99久久蜜桃| 久久九九久精品国产免费直播| 91久久精一区二区三区大全| 亚洲成av人片不卡无码久久| 精品久久久久中文字| 国产成人久久777777| 麻豆精品久久精品色综合| 国产精品无码久久综合| 97精品国产97久久久久久免费| 久久93精品国产91久久综合| 99久久精品免费观看国产| 国产精品禁18久久久夂久| 精品无码久久久久久尤物| 人妻精品久久无码区| 国产精品国色综合久久| 久久电影网一区| 精品久久久无码中文字幕天天| 国产免费福利体检区久久|