//// 배열을 사용해 객체를 여러개 만든다//intxCnt=6;// 가로 방향 갯수intyCnt=4;// 세로 방향 갯수inttCnt=xCnt*yCnt;intdiam=100;// 원의 지름// CircleArrow 클라스의 객체를 여러개 보관할 변수 배열CircleArrow[]ca=newCircleArrow[tCnt];voidsetup(){size(640,480);floatxDist=width/xCnt;floatxLen=xDist*(xCnt-1);floatxStart=(width/2)-(xLen/2);floatyDist=height/yCnt;floatyLen=yDist*(yCnt-1);floatyStart=(height/2)-(yLen/2);for(inti=0;i<xCnt;i++){for(intj=0;j<yCnt;j++){intidx=(xCnt*j)+i;ca[idx]=newCircleArrow(xStart+(i*xDist),yStart+(j*yDist),diam);}}}voiddraw(){background(255);for(inti=0;i<tCnt;i++){ca[i].show(mouseX,mouseY);}line(0,mouseY,width,mouseY);line(mouseX,0,mouseX,height);}
//// 만들어 둔 Class를 그대로 쓴다//classCircleArrow{floatx;// 원의 x 좌표floaty;// 원의 y 좌표floatr;// 원의 반지름floattx;// 마우스 방향 원 위의 점 x 좌표, target xfloatty;// 마우스 방향 원 위의 점 y 좌표, target yfloatta;// 원의 원점에서 마우스 방향 각도, target angle// 클라스 변수를 생성하고 초기화 한다.CircleArrow(floatposX,floatposY,floatdiameter){x=posX;y=posY;r=diameter/2;tx=0;ty=0;ta=0;}// 목표 지점으로 방향을 찾고, 원과 만나는 좌표를 계산해 저장한다.voidshow(floattargetX,floattargetY){ta=atan2(targetY-y,targetX-x);tx=x+cos(ta)*r;ty=y+sin(ta)*r;circle(x,y,r*2);line(x,y,tx,ty);}}