青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

算法學社
記錄難忘的征途
posts - 141,comments - 220,trackbacks - 0

題目描述:

   定義一種變換向量的語言,其語法有這么幾種:
      1. translate tx ty tz  功能:(x,y,z) = (x+tx,y+ty,z+tz)
      2. scale a b c         功能:(x,y,z) = (ax,by,cz)
      3. rotate tx ty tz angle  功能:讓x,y,z以tx,ty,tz為軸逆時針旋轉angle。
      4. rotate k .... end   功能: 重復執行...k次
    給若干個向量,輸出對應的變換后的向量。

吐槽:

    1. 注意-0.0的情況。
    2. 樣例過了基本就過了。

算法分析:

    因為語法4,所以不難想到要使用矩陣來變換向量。
    2的矩陣變換都比較直觀,3的矩陣變換有公式。
    關鍵是1的變換矩陣我糾結了好久。
    其實把矩陣變成4×4就可以了
        1  0  0  0
        0  1  0  0
        0  0  1  0
        tx ty tz 1
    最后用[x,y,z,1]去乘最終變換矩陣就可以了。。。
  1 #include<iostream>
  2 #include<cmath>
  3 #include<cstdio>
  4 #include<string>
  5 using namespace std;
  6 const int N = 4;
  7 struct matrix {
  8     double num[N][N];
  9     matrix (double a){
 10         for(int i=0;i<N;i++)
 11             for(int j=0;j<N;j++)
 12                 num[i][j] = (i==j)*a;
 13     }
 14     matrix(double x,double y,double z){
 15         for(int i=0;i<N;i++)
 16             for(int j=0;j<N;j++)
 17                 num[i][j] = (i==j)*1.0;
 18         num[3][0] = x;
 19         num[3][1] = y;
 20         num[3][2] = z;
 21     }
 22     matrix(double x,double y,double z, int X){
 23         for(int i=0;i<N;i++)
 24             for(int j=0;j<N;j++)
 25                 num[i][j] =(i==j)*1.0;
 26         num[0][0] = x; num[1][1] = y; num[2][2] = z;
 27     }
 28     matrix(double P[3],double ang){
 29         for(int i=0;i<N;i++)
 30             for(int j=0;j<N;j++) num[i][j] = (i==j)*1.0;
 31         double flag [3][3] = {0,1.0,-1.0,-1.0,0,1.0,1.0,-1.0,0}, sum = P[0] + P[1] + P[2];
 32         for(int i=0;i<3;i++)
 33             for(int j=0;j<3;j++) if(i == j)
 34                 num[i][j] = P[i]*P[i] + (1-P[i]*P[i]) * cos(ang);
 35                 else num[i][j] = P[i]*P[j]*(1-cos(ang)) + (sum - P[i] - P[j]) * sin(ang) * flag[i][j];
 36     }
 37 };
 38 matrix operator * (const matrix& a, const matrix& b){
 39     matrix c(0.0);
 40     for(int i=0; i<N; i++)
 41         for(int j=0; j<N; j++)
 42             for(int k = 0; k<N; k++)
 43                 c.num[i][j] += a.num[i][k] * b.num[k][j];
 44     return c;
 45 }
 46 matrix pow(matrix a, int b){
 47     matrix ans(1.0), t = a;
 48     while(b) {
 49         if(b&1) ans = ans * t;
 50         t = t * t; b>>=1;
 51     }
 52     return ans;
 53 }
 54 const double pi = acos(-1.0);
 55 matrix dfs(){
 56     matrix ans(1.0);
 57     string cmd;
 58     int k; double x,y,z,a;
 59     for(;;){
 60         cin >> cmd;
 61         if(cmd=="end") return ans;
 62         else if(cmd=="repeat"){
 63             scanf("%d",&k);
 64             matrix temp = dfs();
 65             temp = pow(temp, k);
 66             ans = ans * temp;
 67         }
 68         else {
 69             scanf("%lf%lf%lf",&x,&y,&z);
 70             if(cmd == "translate"){
 71                 matrix temp(x, y, z); ans = ans * temp;
 72             }
 73             else if(cmd == "scale"){
 74                 matrix temp(x, y, z, 0); ans = ans * temp;
 75             }
 76             else {
 77                 scanf("%lf",&a);
 78                 a = a/180.0*pi;
 79                 double sum = sqrt(x*x + y*y +z*z);
 80                 double p[3] = {x/sum, y/sum, z/sum};
 81                 matrix temp(p,a); ans = ans * temp;
 82             }
 83         }
 84     }
 85 }
 86 double pre(double x){
 87     return x + 1e-6;
 88 }
 89 int main(){
 90     int n;
 91     while(~scanf("%d",&n) && n){
 92         matrix t = dfs();
 93         double x,y,z,px,py,pz;
 94         while(n--){
 95             scanf("%lf%lf%lf",&x,&y,&z);
 96             px = x*t.num[0][0] + y*t.num[1][0] +z*t.num[2][0] + t.num[3][0];
 97             py = x*t.num[0][1] + y*t.num[1][1] +z*t.num[2][1] + t.num[3][1];
 98             pz = x*t.num[0][2] + y*t.num[1][2] +z*t.num[2][2] + t.num[3][2];
 99             printf("%.2lf %.2lf %.2lf\n",pre(px),pre(py),pre(pz));
100         }
101         puts("");
102     }
103 }
104 
posted on 2012-06-24 16:01 西月弦 閱讀(438) 評論(1)  編輯 收藏 引用 所屬分類: 解題報告

FeedBack:
# re: hdu 4087 仿射幾何 + 矩陣乘法[未登錄]
2012-06-26 00:04 | David
這個為什么叫做仿射幾何呢?  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99精品国产福利在线观看免费| 欧美视频免费在线| 亚洲高清视频在线观看| 久久精品人人爽| 久久精品一区蜜桃臀影院| 美女性感视频久久久| 老司机久久99久久精品播放免费| 久久国产视频网站| 久久精品二区三区| 欧美精品免费播放| 国产精品久久久久久久久久免费| 国产乱肥老妇国产一区二| 国产午夜精品麻豆| 在线不卡中文字幕播放| 99热免费精品| 欧美亚洲免费| 嫩草国产精品入口| 一个色综合av| 久久久人成影片一区二区三区观看 | 国产美女精品| 在线精品视频免费观看| 夜久久久久久| 久久精品成人欧美大片古装| 免费看成人av| 亚洲在线视频网站| 欧美成人影音| 国内精品美女av在线播放| 99国内精品久久| 久久一区中文字幕| 亚洲午夜伦理| 欧美日韩高清不卡| 在线观看欧美日韩| 欧美专区在线观看| 日韩视频精品| 欧美成人性生活| 一区二区视频欧美| 欧美一级视频免费在线观看| 亚洲人成网站777色婷婷| 久久国产主播| 国产欧美日韩| 亚洲欧美国产日韩中文字幕| 欧美国产日韩一区二区在线观看 | 日韩天天综合| 久久久久久久一区| 亚洲一区二区在线看| 欧美日韩国产二区| 亚洲黄色小视频| 美女91精品| 欧美主播一区二区三区| 国产精品综合网站| 亚洲欧美精品| 亚洲图片欧美日产| 欧美视频中文字幕在线| 中日韩美女免费视频网站在线观看| 欧美xart系列在线观看| 欧美激情 亚洲a∨综合| 久久精品人人做人人爽| 国产午夜亚洲精品羞羞网站| 先锋影音网一区二区| 亚洲尤物精选| 国产女同一区二区| 久久电影一区| 久久精品国产第一区二区三区最新章节 | 欧美多人爱爱视频网站| 在线播放日韩欧美| 欧美高清视频在线观看| 美女诱惑一区| 在线亚洲国产精品网站| aa级大片欧美三级| 国产精品女主播| 久久精品欧洲| 久久夜色精品国产欧美乱极品| 在线观看视频免费一区二区三区| 蜜月aⅴ免费一区二区三区| 久久青青草原一区二区| 亚洲激情小视频| 欧美成人在线免费视频| 欧美黄在线观看| 亚洲永久在线| 性久久久久久久久| 在线高清一区| 日韩香蕉视频| 国产一区二区在线观看免费| 欧美成人免费网| 欧美日韩免费高清一区色橹橹| 亚洲欧美中文另类| 可以看av的网站久久看| 一区二区三区四区精品| 欧美一区三区三区高中清蜜桃| 亚洲二区在线| 亚洲午夜一区| 亚洲激情网址| 亚洲欧美日韩精品综合在线观看 | 亚洲国产高清自拍| 日韩午夜av| 激情综合色综合久久综合| 亚洲激情一区| 国内精品久久久久久| 亚洲理论在线| 在线成人激情| 亚洲一区二区三区久久| 亚洲国产婷婷| 欧美一级黄色录像| 亚洲视频每日更新| 美女黄网久久| 久久国产精品免费一区| 欧美日韩午夜视频在线观看| 麻豆成人在线播放| 国产精品美女一区二区在线观看| 欧美.www| 黑人极品videos精品欧美裸| 中日韩午夜理伦电影免费| 亚洲精品乱码久久久久久| 欧美一级在线亚洲天堂| 亚洲一区二区免费在线| 亚洲激情中文1区| 国产亚洲成精品久久| 日韩亚洲欧美在线观看| 亚洲啪啪91| 久久久爽爽爽美女图片| 久久午夜影视| 久久精品欧美日韩| 性色一区二区| 欧美美女bbbb| 另类天堂视频在线观看| 国产精品亚洲аv天堂网| 亚洲人体大胆视频| 精品动漫av| 欧美资源在线| 久久嫩草精品久久久精品一 | 亚洲第一页中文字幕| 久久国产福利国产秒拍| 久久精品国产第一区二区三区| 国产精品狼人久久影院观看方式| 亚洲靠逼com| 亚洲午夜av电影| 欧美久久电影| 99国产麻豆精品| 亚洲午夜激情网页| 国产精品v片在线观看不卡| 亚洲免费电影在线| 中国女人久久久| 欧美日本一道本| 99riav1国产精品视频| 亚洲影院高清在线| 国产伦精品一区二区三区免费迷| 亚洲欧美在线一区二区| 久久都是精品| 韩国精品在线观看| 美国成人直播| 亚洲乱码久久| 久久精品欧美日韩| 亚洲国产欧美日韩| 欧美喷潮久久久xxxxx| 亚洲夜间福利| 久久综合婷婷| 99re热这里只有精品视频| 欧美日韩在线视频观看| 亚洲一区二区毛片| 久久亚洲二区| 99视频国产精品免费观看| 国产精品剧情在线亚洲| 欧美中文字幕视频在线观看| 欧美高清在线| 亚洲男人的天堂在线aⅴ视频| 国产日本亚洲高清| 美女视频网站黄色亚洲| 妖精成人www高清在线观看| 久久久久久久久久久久久女国产乱| 在线日韩日本国产亚洲| 欧美日韩高清在线播放| 欧美一区二区三区在线| 国产欧美亚洲日本| 亚洲欧美日韩国产综合| 久久只有精品| 日韩亚洲精品电影| 国产精品欧美在线| 久久频这里精品99香蕉| 亚洲欧洲一区二区天堂久久| 亚洲一区二区三区四区五区午夜| 国产精品永久免费观看| 久久影院亚洲| 亚洲免费视频一区二区| 一区二区三区在线观看国产| 欧美日韩国产综合视频在线观看中文 | 久久se精品一区精品二区| 亚洲福利av| 国产精品高潮呻吟| 久久精品成人一区二区三区| 亚洲精品一区久久久久久| 久久国产精品久久精品国产| 日韩午夜在线观看视频| 激情综合色综合久久| 国产精品影视天天线| 欧美三级视频在线观看| 免费成人在线观看视频| 欧美资源在线| 亚洲男人av电影| 亚洲手机视频| 日韩一级在线|