processing으로 깨끗한 방정식을 시각화

1636 단어 processing


세상에는 다양한 수식이 존재하고 그 중 하나에 Clifford Attractor라는 것이 있습니다
xn+1 = sin(a yn) + c cos(a xn)
yn+1 = sin(b xn) + d cos(b yn)
매우 간단하지만 계산을 반복하면 매우 깨끗한 수식입니다.

넷등에서 sourcecode가 있는지 조사해 보았습니다만 되어 있었으므로(만약 있으면 있으면 죄송합니다...)
식을 해석하고 썼습니다. 독학이므로이 해석이 정답인지는 모릅니다.

clifford_attractor.pde
int count=40000;

float x=1;
float y=1;
float z=1;

float a=1.4;
float b=1.6;
float c=1;
float d=1.7;

float xn;
float yn;
float zn;

float rotate_x;
float rotate_y;




float [][] points=new float[3][count];

void setup(){
size(750,400,P3D);

//xn+1= sin(a*yn)-c*cos(a*xn)
//yn+1= sin(b*xn)-d*cos(d*yn)
//zn+1= sin(xn)

for(int i=0;i<count;i++){

xn= sin(a*y)-c*cos(a*x);
yn= sin(b*x)-d*cos(d*y);
zn= sin(x);

x=xn;
y=yn;
z=zn;

points[0][i]=x*100;
points[1][i]=y*50;
points[2][i]=z*100;

}

}

void draw(){
background(#000000);
 fill(#FFFFFF);
translate(width/2,height/2);

rotateX(rotate_x);
rotateY(rotate_y);

for(int i=0;i<count;i++){
 pushMatrix();

  beginShape(POINTS);
  vertex(points[0][i],points[1][i],points[2][i]);
  endShape();

stroke(#FFFFFF);
popMatrix();

}

 rotate_x+=0.03;
 rotate_y+=0.03;

}

덧붙여서 Z 좌표의 식 zn=sin(x)는 깊이를 내고 싶었기 때문에 제가 적당히 쓴 것입니다
100 줄이 없으므로 복사하여 사용하십시오.
PVector 클래스나 셰이더 등 사용해 애니메이션 시키면 재미있을지도 네요~.
참고 사이트
h tp : // 파우 l 보우 r 케. 네 t / f 등 c ls / c ぃふぉ rd /

좋은 웹페이지 즐겨찾기