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

算法學社
記錄難忘的征途
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精品久久久| 国产精品国产成人国产三级| 中日韩在线视频| 亚洲精品日韩一| 欧美日韩视频专区在线播放| 在线一区二区三区四区| 一区二区三区精品视频在线观看| 欧美调教vk| 亚洲欧美日韩天堂一区二区| 亚洲一区二区三区在线播放| 国产日韩欧美不卡| 六十路精品视频| 欧美韩国日本综合| 亚洲一区国产精品| 午夜精品久久久| 亚洲第一福利社区| 亚洲精品视频二区| 国产精品影片在线观看| 久久精品99国产精品| 久久久美女艺术照精彩视频福利播放 | 欧美h视频在线| 欧美国产第一页| 亚洲欧美日韩综合| 欧美亚洲视频| 最新亚洲激情| 99精品热视频只有精品10| 国产欧美日韩在线 | 99热精品在线观看| 国产精品久久久久一区二区| 欧美一级夜夜爽| 久久国产主播精品| 一区二区三区欧美视频| 欧美亚洲网站| 亚洲精品一区二区三区av| 一区二区三区日韩| 国外成人在线视频网站| 亚洲国产欧美另类丝袜| 欧美三级在线视频| 久久久久久久高潮| 蜜桃久久av一区| 亚洲欧美经典视频| 久久婷婷久久| 香蕉久久一区二区不卡无毒影院 | 亚洲成在人线av| 一区二区三区高清在线观看| 精品成人一区二区三区| 99国内精品久久| 亚洲成色999久久网站| 亚洲欧美国产精品专区久久| 亚洲精品午夜| 久久综合网hezyo| 久久精品日产第一区二区| 欧美日韩第一区| 欧美福利电影网| 国产亚洲一区二区三区在线观看| 亚洲人成欧美中文字幕| 伊人久久成人| 欧美影片第一页| 亚洲尤物在线| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲欧美日韩国产成人精品影院| 美女视频网站黄色亚洲| 久久精品国产一区二区三| 欧美三级在线视频| 亚洲国产精品视频| 亚洲国产老妈| 久热精品视频在线观看| 久久一区二区三区国产精品| 国产美女精品免费电影| 亚洲免费在线观看| 国产精品99久久久久久白浆小说| 欧美高清自拍一区| 欧美激情综合色| 亚洲国产天堂久久国产91| 久久久精品视频成人| 蜜臀久久久99精品久久久久久| 狠狠色狠狠色综合日日小说| 久久精品亚洲| 欧美99在线视频观看| 亚洲福利电影| 农村妇女精品| 亚洲精品1区2区| 亚洲特级毛片| 国产精品视频久久一区| 欧美一区二区三区啪啪| 欧美在线精品一区| 国产亚洲精品美女| 久久久久成人精品| 亚洲国产片色| 性欧美大战久久久久久久久| 国产综合网站| 欧美不卡视频一区发布| 亚洲免费福利视频| 欧美一级一区| 影音先锋亚洲视频| 欧美久久久久中文字幕| 中文国产一区| 久久午夜精品| 亚洲老司机av| 国产精品成人aaaaa网站| 亚洲欧美日韩中文视频| 久久精品国产免费看久久精品| 韩国精品主播一区二区在线观看| 久久久噜噜噜久噜久久| 亚洲国产欧美在线| 亚洲女ⅴideoshd黑人| 国产精品一区二区久久| 久久久久国内| 亚洲理论电影网| 性色av香蕉一区二区| 一区在线免费| 欧美视频二区36p| 久久久久久久久久久成人| 亚洲黄色免费网站| 亚洲欧美国产77777| 在线看片成人| 国产精品mm| 久久久高清一区二区三区| 亚洲欧洲日本专区| 欧美亚洲在线| 亚洲另类自拍| 狠狠v欧美v日韩v亚洲ⅴ| 欧美欧美午夜aⅴ在线观看| 香蕉久久夜色| 夜夜精品视频| 亚洲高清123| 久久久久网站| 欧美一二区视频| 亚洲视频在线免费观看| 亚洲激情啪啪| 国产亚洲精品久久久久婷婷瑜伽| 欧美成人亚洲成人日韩成人| 亚洲视频一二| 亚洲精品九九| 欧美aⅴ一区二区三区视频| 亚洲你懂的在线视频| 亚洲国产综合在线| 好看的日韩视频| 国产精品羞羞答答| 欧美日韩国产黄| 免费成人av在线| 久久精品一区四区| 亚洲欧美日韩天堂| 亚洲午夜成aⅴ人片| 99国产精品99久久久久久粉嫩| 欧美高清成人| 麻豆成人在线观看| 久久久久久伊人| 久久久久国产精品午夜一区| 亚洲伊人伊色伊影伊综合网| 亚洲精品在线视频| 亚洲国产精品一区制服丝袜 | 久久人人爽人人爽| 欧美在线三级| 欧美在线观看视频| 亚洲免费中文| 亚洲午夜未删减在线观看| 99精品欧美一区二区三区综合在线 | 一本色道久久综合亚洲精品不卡 | 中文在线不卡| 一区二区三区波多野结衣在线观看| 亚洲国产福利在线| 欧美大片免费久久精品三p| 麻豆成人在线播放| 欧美岛国在线观看| 亚洲国产欧美日韩精品| 亚洲国产一区二区精品专区| 亚洲大片精品永久免费| 亚洲第一在线| 亚洲欧洲一区二区天堂久久 | 一本一道久久综合狠狠老精东影业| 最新亚洲激情| 99精品欧美一区二区三区| 日韩一区二区免费看| avtt综合网| 午夜在线精品偷拍| 久久九九国产| 欧美成人午夜影院| 欧美午夜电影在线| 国产日韩亚洲欧美| 影音先锋久久| 在线视频精品一区| 午夜日韩福利| 久久综合九色综合欧美狠狠| 亚洲大胆人体在线| 亚洲一区二区欧美| 久久人人爽人人爽爽久久| 欧美大片免费观看| 国产精品美女久久久久久久|