Processing 012 怎么绘制一个球体
斐波那契网格
在 processing 中有自带的绘制球体的工具,但是不能控制每一个点,如何在一个球面尽量均匀分布 N 个点是一个笔记哦啊复杂的问题。一般计算都比较复杂,但是斐波那契网格似乎是一个很完美的解。以下是一个半径为1的球
z[n] = (2n - 1) / N - 1
x[n] = sqrt(1 - square(z[n])) * cos(2n*pi*φ)
y[n] = sqrt(1 - square(z[n])) * sin(2n*pi*φ)
其中 N 是点总个数, φ 是黄金分割比
代码
int N = 1000;
float phi = 0.618;
float r = 200;
void setup(){
size(680, 480, P3D);
strokeWeight(3);
stroke(255);
}
float p = 0;
float q = 0;
void draw(){
background(0);
translate(width/2, height/2);
rotateY(p);
rotateX(q);
p+=0.00005 * (mouseX - width/2);
q+=0.00005 * (mouseY - height/2);
for(int i = 1; i <= N;i++){
float z = (2.0 * i - 1) / N - 1;
float x = sqrt(1-sq(z)) * cos(2 * PI * i * phi);
float y = sqrt(1-sq(z)) * sin(2 * PI * i * phi);
point(r * x, r * y, r * z);
}
}