2019年4月30日 星期二

uva100:3n+1




1.讀input

2.ans不明

所以
(1)ans是maxlength(最大長度),我們用max表示
(2)將規律翻譯出來(此程式還不能執行)
while:因為題目說"停止",所以條件要用while而不是if

3. 接下來,我們知道n是要被丟進if判斷的input,所以要從input裡面找出n的範圍


所以下一個方向是要寫出input從a跑到b這種感覺,我在for裡面宣告一個變數atob(a到b的意思)

為了讓atob可以專心做好永遠都是a到b
不讓atob改變,每次進入迴圈就讓n=atob
for(int n){
}
相當於
int n;
for(){
}
都是在迴圈外宣告、重製的意思
4.公式可以跑之後 我們要來求長度,例如上圖圈起來的atob=3時 長度是7+2(也要數到自己和1)
可以利用count來求長度,這裡的count就是length

 

 5.把count擺if判斷裡面,每運算一次就++



6.在count裡面抓出最大的count





7.最後  測試資料裡面會有 a大b小的資料
所以要把大的擺到b小的擺到a

2019年4月26日 星期五

紫色の兔子 Week10


改變旋轉軸


自轉
glTranslatef(x,y,z);
glRotatef(x,y,z);

公轉
glRotatef(x,y,z);
glTranslatef(x,y,z);








week10

下載好之後,觀察更鰾順序後是否有什麼改變


改變前是自轉 

 改變後是公轉 

 改變前 

 改變後 

做好前置作業,你知道的


做個茶壺
程式碼:
#include <GL/glut.h>
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSolidTeapot(0.3);
    glutSwapBuffers();

}

int main(int argc, char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10-TRT");

    glutDisplayFunc(display);
    glutMainLoop();
}


加個煙
程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0,0.5,0);
        glutWireTeapot(0.3);
    glPopMatrix();
    glPushMatrix();
        glTranslatef(0.51,0.64,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.6,0,0);

        glRotatef(-90,0,1,0);
        glutWireCone(0.1,0.6,10,10);
    glPopMatrix();
    glutSwapBuffers();

}
void motion(int x,int y)
{
    angle = x;
    display();
}

int main(int argc, char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week10-TRT");

    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}

week10

1.www.cmlab.csie.ntu.edu.tw/~jsyeh/3dcg10裡面先下載data,win32,glut32.dll

2.將windows解壓縮


3.將data解壓縮至windows的資料夾,並將glut32.dll移進去

4.按滑鼠右鍵點選swap translate/rotate





 5.https://www.transmissionzero.co.uk/software/freeglut-devel/

 6.freeglut解壓縮到桌面,點進lib資料夾將libfreeglut.a複製並改名為libglut32.a

 7.新增一個project選擇glut project


 8.複製程式碼並執行
#include <GL/glut.h>
void display()
{
    glutSolidTeapot(0.3);
    glutSwapBuffers();
}
int main(int argc, char ** argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week10 TRT");
    glutDisplayFunc(display);
    glutMainLoop();
}


9.新增一個圓錐體,做茶壺的延伸
程式碼:
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
        glTranslatef(0,0.5,0);
        glutSolidTeapot(0.3);
    glPopMatrix();
    glPushMatrix();
        glTranslatef(0.51,0.63,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.6,0,0);

        glRotatef(-90,0,1,0);
        glutWireCone(0.1,0.6,10,10);
    glPopMatrix();
    glutSwapBuffers();
}
void motion(int x,int y)
{
    angle=x;
    display();
}
int main(int argc, char ** argv)
{
    glutInit( &argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("Week10 TRT");
    glutDisplayFunc(display);
    glutMotionFunc(motion);
    glutMainLoop();
}





week10

各個程式碼所代表的意思
經過老師分框框之後就知道程式怎麼跑了
依照程式碼把水壺往上移動

利用圓椎壓扁移動 使軸心移動

huangxuuu電腦圖學week10

今日目標:TRT旋轉(改變旋轉軸)


一.移動與旋轉
(1)設定好windows目錄,執行transformation.exe
 
(2)觀察glRotatef和glTranslate順序對調會有什麼差別
*glTranslatef();在外面:自轉後一邊移動
*glRotatef();在外面:一邊移動一邊繞著別人轉
 

二.TRT旋轉
 
 

電腦圖學---10

電腦圖學---10



下載 
data (裡面有MAYA圖案,移動到Windows資料夾)   
win32 (解壓縮會有Windows資料夾)   
glut32.dll (移動到Windows資料夾)

⧭公轉、自轉
自轉 (先T在R)
公轉 (先R在T)

                                                                                                                                                                                       
➟打開codeblocks
 Files> New>project>GLUT    到Google 搜尋 freeglut windows 下載  Download freeglut 3.0.0 for MinGW   解壓縮 freeglut打開 lib 找到 freeglut.a 並複製
 freeglut.a 改為 libglut32.a
複製 freeglut連接位置

找到 程式碼 main.c 並打開  執行完成!  




🔺將原本的glutSolidTeapot改成glutWireTeapot
   茶壺會變成只有框架的茶壺
加上glutWireCone畫出圓錐
更改位置及旋轉點  讓圓錐點對準茶壺嘴
加上滑鼠控制旋轉的程式碼 可讓圓椎透過滑鼠移動旋轉

程式碼
#include <GL/glut.h>
float angle=0;
void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPushMatrix();
      glTranslatef(0.51,0.63,0); /// (3)希望把 會動的手 從肚臍移到茶壺上
      glRotated(angle, 0,0,1);/// (1)這是手的旋轉
      glTranslatef(0.6,0,0); /// (2)這是把手旋轉中心,先移到畫面的中心

      glRotatef(-90,0,1,0);
      glutWireCone(0.1,0.6,10,10);

    glPopMatrix();
    glutSwapBuffers();
}
void motion(int x, int y)
{
    angle =x;
    display();
}
int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("week 10");

    glutDisplayFunc(display);
    glutMotionFunc(motion);

    glutMainLoop();
}






 

幫我稱10秒!!!week_10

1.講解在程式中 把Translatef和Rotatef的順序對調
   會有怎樣的變化
   Translatef在前面,旋轉的方式像是自體旋轉
   Rotatef在前面,旋轉的方式像是地球公轉,繞著一個圓心轉
   程式順序由下看到上會比較容易理解

2.做出如下圖的程式


圓錐體可在茶壺口旋轉

#include <GL/glut.h> float angle=0; void display() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glPushMatrix(); glTranslated(0,0.5,0); glutWireTeapot(0.3); glPopMatrix(); glPushMatrix(); glTranslated(0.51,0.63,0); glRotatef(angle,0,0,1); glTranslated(0.6,0,0); glRotatef(-90,0,1,0); glutWireCone(0.1,0.6,10,10); glPopMatrix(); glutSwapBuffers(); } void motion(int x,int y)//用滑鼠來設定x,y { angle = x; display(); } int main(int argc,char ** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH); glutCreateWindow("第N個程式"); glutDisplayFunc(display); glutMotionFunc(motion);//呼叫滑鼠函式 glutMainLoop(); }

學渣的奮鬥史-8

我今天手機螢幕摔碎了

難過的一天QAQ


今天的上課內容是在旋轉跟移動還有縮放的關聯

有分自轉及公轉的差別

以下是自轉


再來是公轉


接這用這個概念做了茶壺旋轉的延伸

程式碼如下圖
#include <GL/glut.h>
float angle=0;
void display()
{

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glPushMatrix();//備份矩陣,保護程式
        glTranslatef(0,0.5,0);
        glutWireTeapot(0.3);
    glPopMatrix();//還原矩陣
        glPushMatrix();//備份矩陣,保護程式
        glTranslatef(0.51,0.63,0);
        glRotatef(angle,0,0,1);
        glTranslatef(0.6,0,0);
        glRotatef(-90,0,1,0);
        glutWireCone(0.1,0.6,10,10);
    glPopMatrix();//還原矩陣
    glutSwapBuffers();
}
void motion(int x,int y)//用滑鼠來設定x,y
{
    angle=x;
    display();
}

int main(int argc,char ** argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
    glutCreateWindow("第N個程式");
    glutDisplayFunc(display);
    glutMotionFunc(motion);//呼叫滑鼠函式
    glutMainLoop();
}

成果如下




就這樣 ㄅㄅ