• <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 閱讀(295) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): ACM-計(jì)算幾何

            久久精品国产亚洲av麻豆图片| 久久伊人影视| 日本久久久久久中文字幕| 精品久久久久久久久中文字幕| 国产日韩久久免费影院| 亚洲国产成人久久笫一页| 久久精品国产网红主播| 国产女人aaa级久久久级| 亚洲色欲久久久综合网东京热| 大伊人青草狠狠久久| 国产精品久久久久久久app| 国产亚洲美女精品久久久久狼| 人妻少妇精品久久| 国产精品99久久久久久人| 欧美一级久久久久久久大| 2022年国产精品久久久久| 伊人色综合久久天天网| 国产叼嘿久久精品久久| 久久精品卫校国产小美女| 久久久久久久国产免费看| 久久精品夜夜夜夜夜久久| 国产精品99久久久精品无码| 91精品国产色综久久 | 国产精品九九九久久九九| 久久亚洲国产精品成人AV秋霞| 国产精品va久久久久久久| 久久er国产精品免费观看2| 亚洲va中文字幕无码久久| 亚洲伊人久久综合中文成人网| 一本久久a久久精品综合夜夜| 久久九九精品99国产精品| 欧洲人妻丰满av无码久久不卡| 久久综合亚洲鲁鲁五月天| 久久久久亚洲爆乳少妇无 | 精品永久久福利一区二区| 中文字幕乱码人妻无码久久| 久久无码中文字幕东京热| 久久久青草青青国产亚洲免观| 久久性精品| 一本久久精品一区二区| 精品无码久久久久国产动漫3d|