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

算法學社
記錄難忘的征途
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>
            欧美三级视频在线| 欧美先锋影音| 亚洲精品1区2区| 亚洲在线成人| 亚洲免费在线观看| 亚洲自拍偷拍色片视频| 香蕉久久夜色精品国产使用方法| 亚洲免费一在线| 欧美一区午夜精品| 久久综合伊人| 亚洲国产欧美日韩另类综合| 最近看过的日韩成人| 在线亚洲一区二区| 亚洲女性喷水在线观看一区| 久久精品天堂| 亚洲电影毛片| 亚洲视频中文| 久久九九免费| 欧美美女bb生活片| 国产伦精品一区| 在线精品国产成人综合| 亚洲精品资源| 午夜久久99| 欧美成人综合在线| 亚洲视频在线观看| 久久一区二区三区四区五区| 欧美电影免费观看网站| 国产精品影视天天线| 91久久久久久国产精品| 欧美影院在线播放| 欧美华人在线视频| 亚洲在线观看免费| 欧美经典一区二区| 国内久久精品视频| 亚洲一区二区高清| 亚洲电影第1页| 久久精品亚洲| 欧美日韩亚洲系列| 亚洲国产天堂久久国产91| 一区二区国产日产| 久久精品一二三| 亚洲免费观看| 美女精品在线| 影音先锋中文字幕一区| 欧美一区在线直播| 亚洲视频图片小说| 欧美日韩国产精品成人| 亚洲国产成人在线播放| 亚洲综合激情| 91久久久亚洲精品| 乱人伦精品视频在线观看| 国产日韩精品在线| 午夜国产不卡在线观看视频| 亚洲精选一区二区| 国产精品一级久久久| 久久国产精品第一页| 国产精品一区二区久久国产| 中文日韩在线视频| 99精品视频免费观看视频| 欧美国产极速在线| 亚洲国产日韩综合一区| 免费视频久久| 卡一卡二国产精品| 亚洲国产裸拍裸体视频在线观看乱了中文 | 一区二区三区欧美在线| 亚洲国产婷婷香蕉久久久久久99 | 亚洲影视九九影院在线观看| 欧美日韩视频在线| 亚洲精品小视频在线观看| 欧美成人自拍| 欧美日韩国产色综合一二三四| 99国产精品久久久| 亚洲视频一区在线观看| 国产日韩欧美精品| 欧美国产日韩亚洲一区| 欧美精品成人一区二区在线观看| av成人手机在线| 日韩午夜视频在线观看| 国产精品久久午夜| 开心色5月久久精品| 欧美国产精品v| 欧美一区二区视频97| 欧美一区午夜视频在线观看| 国内激情久久| 男人的天堂成人在线| 性欧美xxxx视频在线观看| 国产乱码精品1区2区3区| 久久av老司机精品网站导航| 久久成人人人人精品欧| 在线成人亚洲| 一本久久综合亚洲鲁鲁| 国产日韩欧美夫妻视频在线观看| 米奇777超碰欧美日韩亚洲| 老色鬼久久亚洲一区二区| 91久久精品日日躁夜夜躁欧美 | 一区二区三区日韩欧美| 国产精品主播| 欧美成人a视频| 欧美日韩成人一区二区三区| 亚洲欧美日韩久久精品| 久久久久久久激情视频| 亚洲性夜色噜噜噜7777| 久久久人人人| 午夜精品影院| 欧美日韩高清区| 媚黑女一区二区| 国产无一区二区| 99精品福利视频| 亚洲国产另类久久久精品极度| 日韩亚洲欧美成人| 伊人久久婷婷| 午夜精品福利电影| 亚洲午夜久久久久久尤物| 久久精品最新地址| 欧美一区二区三区免费看| 免费在线观看成人av| 久久国产婷婷国产香蕉| 欧美日韩1234| 亚洲国产成人tv| 狠狠色2019综合网| 一区二区三区不卡视频在线观看| 国产一区二区三区直播精品电影| 亚洲免费观看视频| 亚洲高清在线观看一区| 亚洲国产综合在线看不卡| 国产亚洲aⅴaaaaaa毛片| 一本色道久久综合亚洲二区三区| 亚洲国产视频直播| 久久视频在线看| 久久精品人人做人人爽| 国产精品久久久| 亚洲视频中文字幕| 亚洲欧美视频| 国产精品国产| 亚洲一区二区网站| 午夜精品久久久久久久99黑人| 欧美日韩中文在线| 日韩一区二区精品视频| 一区二区三区不卡视频在线观看| 欧美激情亚洲自拍| 亚洲人精品午夜| 亚洲日本欧美| 欧美全黄视频| 亚洲久久视频| 午夜精品视频在线| 国产欧美日韩免费看aⅴ视频| 亚洲一区免费网站| 久久国产日韩| 亚洲高清毛片| 欧美日韩精品高清| 亚洲欧美国产毛片在线| 久久久久久久国产| 亚洲国产欧美久久| 欧美激情一区二区三区在线| 99热在这里有精品免费| 亚洲欧美日韩天堂一区二区| 国产精品久99| 久久精品av麻豆的观看方式| 欧美韩国在线| 亚洲欧美高清| 亚洲福利视频在线| 欧美日韩在线播| 性色一区二区三区| 久久青草欧美一区二区三区| 亚洲第一精品夜夜躁人人躁| 欧美国产精品人人做人人爱| 一区二区福利| 久久精品人人做人人综合| 国内精品视频在线播放| 欧美激情一区二区三区成人| 在线视频精品| 欧美成年视频| 欧美有码在线视频| 亚洲精品欧洲| 国产午夜精品一区二区三区欧美| 久久久水蜜桃| 99精品视频免费在线观看| 久久一区二区三区超碰国产精品| 亚洲美女在线国产| 国产午夜精品理论片a级探花| 免费观看在线综合| 亚洲专区欧美专区| 亚洲黄网站在线观看| 欧美在线观看视频一区二区三区 | 亚洲国产欧洲综合997久久| 欧美日韩中文字幕在线视频| 性亚洲最疯狂xxxx高清| 99国产精品国产精品久久| 久久伊人亚洲| 午夜精品久久久久久久久久久久久| 在线精品观看| 国产亚洲成av人片在线观看桃 | 欧美www在线| 午夜日韩电影| 亚洲网站在线看| 亚洲人成亚洲人成在线观看| 国内综合精品午夜久久资源| 国产精品国产自产拍高清av王其| 欧美成人午夜免费视在线看片| 欧美在线看片|