int r=100, k=0, m=0, ang=270, speed=5;
void setup() {
size(400, 400);
}
void draw() {
background(255);
translate(width/2,height/2);
noFill();
strokeWeight(2);
stroke(0,50);
arc(0,0,2*r,2*r,0,PI,CHORD);
wave(1,100);
wave(-1,255);
strokeWeight(6);
stroke(255,100);
arc(0,0,2*(r-10),2*(r-10),radians(10),radians(30));
arc(0,0,2*(r-10),2*(r-10),radians(35),radians(38));
if(k>-ang)k-=speed;
else k=0;
strokeWeight(6);
stroke(0,50);
line(0,-100,50*cos(radians(m)),60+20*sin(radians(m)));
m+=speed;
}
void wave(float val,float opacity){
for(int i=-r;i<r;i++){
float y = 15*cos(radians((i+k*val)*ang/(2*r)));
float dis = dist(0,0,i,y+35);
if(dis<100){
float yy = sqrt(sq(r)-sq(i));
float l = dist(i,yy,0,0);
stroke(255,100,100,opacity);
line(i,y+35,i,yy);
}
}
}
/*
let r=50, k=0, m=0, ang=270, speed=4;
function setup() {
createCanvas(400, 400);
}
function draw() {
background(255);
push();
translate(width/2,height/2);
wave(1,100);
wave(-1,255);
rotate(sin(radians(m))/4);
noFill();
strokeWeight(2);
stroke(0,50);
arc(0,0,2*r,2*r,radians(-70),radians(250));
line(-17,-48,-17,-130);
line(-17,-130,-27,-130);
line( 17,-48, 17,-130);
line( 17,-130, 27,-130);
strokeWeight(6);
stroke(255,100);
arc(0,0,2*(r-10),2*(r-10),radians(10),radians(30));
arc(0,0,2*(r-10),2*(r-10),radians(45),radians(50));
pop();
if(k>-ang)k-=speed;
else k=0;
if(m<360)m+=5;
else m=0;
}
function wave(val,opacity){
for(let i=-r;i<r;i++){
let y = 5*cos(radians((i+k*val)*ang/(2*r)));
let dis = dist(0,0,i,y+35);
if(dis<100){
let yy = sqrt(sq(r)-sq(i));
let l = dist(i,yy,0,0);
stroke(100,200,100,opacity);
line(i,y,i,yy);
}
}
}
*/