本文在前一篇《Processing雁群实验》进行延伸扩展,进行“实验性”探索。
本案例要点:
(1)旋转复杂不规则图形;
(2)运用二维数组定义图形;
(3)鼠标左右移动控制物体沿 Y 轴旋转;
(4)点击鼠标线条变色。
效果图如下:
![](https://img.haomeiwen.com/i12686721/d1e5164f258096c7.gif)
代码如下:
int [][]myArray;
//define angle of rotation
float 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);
}
注意:
因为要是一个固定的图形进行旋转,不同于上一篇《Processing雁群实验》中的变动图形,这要求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},
};
动态效果如图:
![](https://img.haomeiwen.com/i12686721/d722f50e8e841349.gif)
网友评论