xxxxxxxxxx
75
/*
Abstract:
_r を中心とした円状に円を並べて描画する。回転描画する円の半径は、_rと_nの値で自動的に他辺と接する値に調整される。
Parameter:
_x : 基準となる中心座標 x
_y : 基準となる中心座標 y
_r : 基準となる円の半径
_angle : 基準となる円の傾き(角度)
_arc_begin : 回転描画する円弧の書き出し位置(角度)
_arc_length : 回転描画する円弧の長さ(角度)
_n : 回転描画する円の個数
*/
function drawRevolvingPattern(
_x, _y, _r,
_angle, _arc_begin, _arc_length,
_n) {
let _angle_step = 360.0 / parseFloat( _n);
let r_sub = _r * 2 * cos(radians((180.0 - _angle_step) / 2.0));
noFill();
for (let i = -90; i < 360 - 90; i = i + _angle_step) {
arc(_x + _r * cos(radians(i + _angle)), _y + _r * sin(radians(i + _angle)),
r_sub, r_sub,
radians(_angle + i + _arc_begin), radians(_angle + i + _arc_begin + _arc_length));
}
}
/*
Abstract:
(_x, _y) を中心として、_n 個の直線を均等に放射状に_rの長さだけ描画する。
Parameter
_x : 基準となる中心座標 x
_y : 基準となる中心座標 y
_r : 直線の長さ
_angle : 放射直線の回転角度
_n : 放射直線の数
*/
function drawRadialWire(_x, _y, _r, _angle, _n) {
angle_step = 360 / parseFloat(_n);
for (var i = -90; i < 360 - 90; i = i + angle_step) {
line(_x, _y, _x + _r * cos(radians(i + _angle)), _y + _r * sin(radians(i + _angle)));
}
}
function setup() {
frameRate(60);
createCanvas(windowWidth, windowHeight);
}
var theta = 0.0;
function draw() {
background(255);
strokeWeight(1);
stroke(0,150);
theta += 0.01;
if( theta >= PI )theta = 0.0;
for (var i = 0; i < 120*sin(theta); i++) {
drawRevolvingPattern(width / 2, height / 2, 1.8 * i*sin(theta), i * -0.7*sin(theta), i * -1.3*sin(theta), i * 0.6*sin(theta), 7*sin(theta));
}
fill(255);
ellipse(width / 2, height / 2, 50, 50);
}
function keyPressed() {
if (key == 's') {
save("output.png");
}
}