Thursday 13 March 2014

ちなみに先日の黒地に青のやつはこんなコードで描けます.恒例の嬉しがりです.といってもコード自体は非常に簡単なので色々遊べそうなツールの紹介というべきかもしれません.

Processing という,だいたい Java ベースでグラフィックス系に特化して初心者ホイホイを目指した感じの言語で書きました.setup() が起動時に呼ばれ, draw() がその後繰り返し呼ばれるという感じになっていて,わかりやすく取っ付き易くてよいです.あと3次元とかもわりといい感じにできるし,svg とかをよしなにあれこれするのも得意と聞きました.ちなみに大変取っ付き易く使いやすくてよい,みたいな話を友人にしたら「そのくらいなら OpenGL とかそのまま叩いても簡単にできるよ」との旨宣告されました.PyOpenGL を触ろうとしたことは過去に何回かありましたが,そんなに描きたいものがなかったのと from OpenGL.GL import * がちょっとなーとか思ったり色々で進捗ほとんどありません.ついでに,ああいうの glVertex2f(0.7,0.0) とかより canvas.vertex2f(0.7,0.0) みたいな書き方のほうが気持ちよく書けるんじゃないかなとか思ってるけどどうなんだろう….
 1 /*
 2  x_{n+1} = yn + axn
 3  y_{n+1} = xn**2 + b
 4 */
 5 
 6 int len = 1600;
 7 int counter = 0;
 8 int n = 5000;
 9 int hue = 0;
10 int loop = 200;
11 float scaler = 500;
12 boolean abprinted = false;
13 
14 float x = 0;
15 float y = 0;
16 float a= 0.18525845; float b=-1.1336243;
17 // or any other values you want
18 
19 void setup(){
20   size(len*3/2,len);
21   background(0);
22   //smooth();
23 }
24 
25 void draw(){
26   translate(len/2, len/2);
27   scale(scaler);
28   strokeWeight(0.001);
29   if (counter <= loop){
30     stepnext();
31     println(counter);
32     counter ++;
33   } else {
34       println("______________");
35       println(a,b);
36       println("______________");
37       saveFrame("mypic.png");
38       noLoop();
39   }
40   if(keyPressed){ // in case you want to see.
41     println(x,y);
42   }
43 }
44 
45 void stepnext(){
46   colorMode(HSB,loop);
47   stroke(loop*200/360,loop,hue);
48   for (int i=0; i<=n; i++){
49     point(x,y);
50     float nextx, nexty;
51     nextx = y + a*x;
52     nexty = x*x + b;
53     x = nextx;
54     y = nexty;
55   }
56   hue++;
57 }
ついでに言うと java 全く知らないので public とか static とか言われてもアレですごめんなさい.

1 comment: