Processing雁群實驗(續)

daqianmen發表於2021-09-09

本案例要點:

(1)旋轉複雜不規則圖形;
(2)運用二維陣列定義圖形;
(3)滑鼠左右移動控制物體沿  Y  軸旋轉;
(4)點選滑鼠線條變色。

效果圖如下:

圖片描述

複雜圖形3D旋轉演示.gif

程式碼如下:

int [][]myArray;//define angle of rotationfloat angle_1; 
void setup() {
  size(500, 500, P3D);
  smooth();  //Define two dimensional array 
  myArray=new int[200][3];  for (int i=0; i<100; i++) {    for (int j=0; j<3; j++) {
      myArray[i][j]=int(random(-100, 100));
    }
  }
}void draw() {
  background(200);
  translate(width/2, height/2, 0);
  rotateY(radians(angle_1));
  noFill();  //draw the shape to rotate
  box(200);
  beginShape();  for (int i=0; i<myArray.length; i++)
  {
    vertex(myArray[i][0], myArray[i][1], myArray[i][2]);
  }
  endShape();
}void mousePressed() {
  stroke(random(255),random(255),random(255));
}void mouseMoved() {
  angle_1=map(mouseX, -width/2, width/2, 0, 360);
}

注意:

因為要是一個固定的圖形進行旋轉,不同於上一篇中的變動圖形,這要求3D位點座標要在setup()函式中提前賦值。如果在draw()中賦值則每次迴圈都重新隨機畫圖,不符合本例要求。

擴充1:用座標點畫規則圖形

規則圖形可以在3D座標中定義座標點,如上例中的座標點由隨機變為規則,變化的程式碼如下:

int [][]myArray={
{0,0,0},
{200,0,0},
{200,0,200},
{0,0,200},
{0,0,0},
{0,100,0},
{100,200,0},
{200,200,0},
{200,0,0},
{200,0,200},
{200,200,200},
{200,0,200},
{200,0,0},
{200,200,0},
{100,200,0},//{0,200,100},
{0,100,0},
{0,200,100},
{0,200,200},
{0,0,200},
{0,200,200},
{200,200,200},
{200,200,0},
};

動態效果如圖:


圖片描述

規則圖形3D旋轉演示



作者:一石匠人
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2816130/,如需轉載,請註明出處,否則將追究法律責任。

相關文章