2015年6月28日 星期日

蘋果的智慧 - Part2.1 移動

本章旨在探討初級智慧動物如何移動。

在說明如何移動之前,我們要先瞭解 Processing 的座標系統。Processing 是以螢幕的左上角落為座標原點 (0, 0),水平方向為 X 軸,往右為正(+),往左為負(-);垂直方向為 Y 軸,往下為正(+),往上為負(-)。旋轉方向順時針為正(+),逆時針為負(-)。您可以參考 https://processing.org/tutorials/drawing/


最初出現的地方

為了方便觀察,最開始我們會將初級智慧動物置放於螢幕中央,如此牠不至於很快就走出螢幕而消失不見。程式碼如下:

size(800, 600)       // 設置螢幕大小,水平為 800 單位,垂直為 600 單位
int cx = width / 2      // cx 表動物目前的水平座標位置
int cy = height / 2     // cy 表動物目前的垂直座標位置

width 和 height 都是公用變數,其意思分別是螢幕的水平尺寸和垂直尺寸,在此處也就是 800 x 600。

如果我們希望初級智慧動物是隨意出現在螢幕的任一角落,我們可以使用亂數函式 random,程式碼可以修改如下:

size(800, 600)       // 設置螢幕大小,水平為 800 單位,垂直為 600 單位
int cx = (int)random(0, width)      // cx 表動物目前的水平座標位置
int cy = (int)random(0, height)     // cy 表動物目前的垂直座標位置

因為 random 傳回的值是 float 的格式,為了要配合 cx 和 cy 的 int 格式,所以我們要在前面加上 (int) 做格式轉換的動作。

然後,我們畫出一個 5x5 單位的正方形來代表初級智慧動物,程式碼如下:

rect(cx, cy, 5, 5);

完整程式碼如下:

int cx, cy;

void setup() {
  size(800,600);
  cx = width / 2;
  cy = height / 2;
}

void draw() {
  rect(cx, cy, 5, 5);
}



更改為隨機出現在任一位置,完整程式碼如下:

int cx, cy;

void setup() {
  size(800,600);
  frameRate(2); // 指定影格速率,每秒執行 2 次 draw 函式
}

void draw() {
  background(155);  // 指定背景顏色,此處有刷新螢幕的作用
  cx = (int)random(0, width);
  cy = (int)random(0, height);
  rect(cx, cy, 5, 5);
}


移動碼

初級智慧動物會依據移動碼的數值來移動。移動碼又可分為水平分量與垂直分量。分量的值愈大表移動速度愈快,反之則愈慢,若為 0 則表示靜止不動。

我們用變數 xv 和 yv 分別代表水平分量和垂直分量的移動值,將位置變數 cx 和 cy 分別加入變數 vx 和 vy,就可以讓初級智慧動物產生移動的效果。

移動有方向性,所以 xv 和 yv 有正負的分別。另外為了限制移動的速度,此處我們將移動分量暫時限定於 -5 ~ 5 之間。

程式碼如下:

int vx = (int)random(-5, 5);
int vy = (int)random(-5, 5);
cx += vx;
cy += vy;


完整程式碼如下:

int cx, cy;

void setup() {
  size(800,600);
  cx = width / 2;
  cy = height / 2;
  frameRate(10);
}

void draw() {
  background(155);
  int vx = (int)random(-5, 5);
  int vy = (int)random(-5, 5);
  cx += vx;
  cy += vy;
  rect(cx, cy, 5, 5);
}


延伸閱讀

亂數 random 函式 https://processing.org/reference/random_.html








沒有留言:

張貼留言