習作②
3Dで球面をぐるぐるまわしたかった。
クラスのコンストラクタの中じゃないと数字を代入できなかったようだ。
angleじゃなくて_angleとかでクラス内に変数を使うとなんとなく頭の理解がスッキリした。
見るとわかりづらいけど使うとわかりやすい。
角度が2つと半径が分かれば三角関数で座標が求まるっていう中学の算数に気づくのに時間かかった。
おもろい
ソース
float radius = 100; int NUM = 10; Pin[] pins = new Pin[NUM]; void setup(){ size(1280,720,P3D); for(int i = 0; i<NUM ; i++){ pins[i] = new Pin(radius); } } void draw(){ translate(width/2.0,height/2.0,height/2.0); background(255); for(int i = 0; i < NUM ; i++){ pins[i].display(); pins[i].step(); } }
クラス
class Pin{ float _angle1; float _angle2; float _radius; Pin(float radius){ _angle1 = random(-PI,PI); _angle2 = random(-PI,PI); _radius = radius; } void display(){ stroke(20); line(0,0,0,sin(_angle2)*_radius,cos(_angle2)*_radius*cos(_angle1),cos(_angle2)*_radius*sin(_angle1)); pushMatrix(); translate(sin(_angle2)*_radius,cos(_angle2)*_radius*cos(_angle1),cos(_angle2)*_radius*sin(_angle1)); fill(20,20); noStroke(); sphere(5); popMatrix(); } void step(){ _angle1 +=PI/180; _angle2 +=PI/180; } }