今天要做的是移動、旋轉、放大縮小
1.1畫出3D的盒子和移動它
*P3D 是processing的3D功能
加上轉動原本只有rotate(mouseX)
但這樣轉的速度太快
所以加上radians
rotate(radians(mouseX))
讓面不要填
使盒子只有線條呈現
如果要把面填起來
fill(0,255,0)//綠色
但是沒有顏色的填充時
會發現有一邊沒有連接起來
就會把門關上了
2.1做摺紙
在畫出多個點時會形成一個面
讓用點形成的面做旋轉
TRT
新增pushMatrix和popMatrix
設定只要按下右鍵
就會停止畫點
並開始旋轉(Y軸)
變換顏色
讓下方顯示出來
3.1
按下去點點外圍會再出現一個圈
點點的直徑設成10
所以當按下去的距離小於5時
外圍會出現圓圈
程式碼
if(dist(p.x,p.y,mouseX,mouseY)<5){
ans = p;
}
按下左鍵畫出點點
按下中鍵可以拖曳點點
程式碼
ArrayList<PVector>pt; void setup(){ size(400,400,P3D); pt = new ArrayList<PVector>(); for(int i=0;i<37;i++){ pt.add(new PVector(random(400),random(400))); }//假設畫面中,點好了37個頂點 } void draw(){ background(255); for(PVector p: pt){//畫出全部的頂點 ellipse(p.x,p.y,10,10); } if(ans!=null)ellipse(ans.x,ans.y,15,15); } PVector ans = null; void mouseDragged(){ if(mouseButton==CENTER && ans!=null){ ans.x = mouseX; ans.y = mouseY; } } void mousePressed(){ if(mouseButton==LEFT) pt.add(new PVector(mouseX,mouseY)); else if(mouseButton==CENTER){ for(PVector p :pt){//厲害的For迴圈(不能增刪裡面的東西) if(dist(p.x,p.y,mouseX,mouseY)<5){ ans = p; } } }else if(mouseButton==RIGHT){//右鍵,要刪掉。要用傳統的for迴圈 for(int i=0;i<pt.size();i++){//要寫兩行,才等於厲害的一行 PVector p = pt.get(i);//要寫兩行,才等於厲害的一行 if(dist(p.x,p.y,mouseX,mouseY)<5){//找到夠近的點 pt.remove(i);//就把第i個點刪掉。(刪的時候,會把大資料結構右邊的都左移動一格) } } } }




沒有留言:
張貼留言