• <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, 評論 - 6, 引用 - 0
            數據加載中……

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

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

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

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

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

            總結:
                  數學很重要啊!


            #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 閱讀(283) 評論(0)  編輯 收藏 引用 所屬分類: ACM-計算幾何

            国产亚洲综合久久系列| 久久久国产乱子伦精品作者| 91精品国产色综合久久| 久久青青草原国产精品免费| 久久精品一区二区影院| 亚洲va久久久久| 久久se精品一区精品二区| 色综合久久久久综合99| 狠狠88综合久久久久综合网| 狠狠色丁香久久婷婷综| 综合久久精品色| 久久高清一级毛片| 国产精品久久一区二区三区| 精品久久人人爽天天玩人人妻| 热99RE久久精品这里都是精品免费 | 亚洲国产成人久久精品动漫| 亚洲欧洲中文日韩久久AV乱码| 亚洲精品乱码久久久久久久久久久久 | 久久综合九色综合网站| 久久国产精品久久精品国产| 久久精品国产亚洲AV香蕉| 国产精品久久久久久久久久免费| 少妇精品久久久一区二区三区 | 欧美日韩中文字幕久久久不卡| 久久久久女人精品毛片| 麻豆久久| 欧美亚洲国产精品久久高清| Xx性欧美肥妇精品久久久久久| 亚洲欧美伊人久久综合一区二区| 日本精品久久久久久久久免费| 久久精品国产半推半就| 久久国产精品无码一区二区三区| 国产一区二区久久久| 久久久久一本毛久久久| 国内精品久久久久影院网站| 日韩精品久久久久久| 99久久国产主播综合精品| 69SEX久久精品国产麻豆| 人妻无码中文久久久久专区| 99麻豆久久久国产精品免费| 无码AV波多野结衣久久|