actionScript 3.0 소스 코드:
var centerX = 250, centerY = 300; //원점 좌표
var mag:Number = 2; //확대율
var mX, mY, mdx, mdy; //마우스 x,y좌표 저장용
function init(){ //초기화
draws();
stage.addEventListener(MouseEvent.MOUSE_DOWN,mDown);
stage.addEventListener(MouseEvent.MOUSE_UP,mUp);
stage.addEventListener(MouseEvent.MOUSE_WHEEL,mWheel);
}
function draws(){ //좌표와 함수 그래프 그리기
drawCoordinates(centerX,centerY,mag*10);
drawFunc(-200,200,2);
}
function mDown(e:MouseEvent){ //마우스 누를때
mX = mouseX; //마우스 눌린 좌표 기억
mY = mouseY;
}
function mUp(e:MouseEvent){ //마우스 놓을때
//마우스 눌렀을 때와 놓았을때의 차이를 기준으로
//중심점 이동하여 새로 그리기
mdx = mX - mouseX;
mdy = mY - mouseY;
centerX -= mdx;
centerY -= mdy;
graphics.clear();
draws();
}
function mWheel(e:MouseEvent){ //마우스 휠 돌릴때
//마우스 휠 돌릴때마다 확대 축소율 조정한 뒤 새로 그리기
if(e.delta > 0){
if(mag < 50) mag++;
}else{
if(mag > 1) mag--;
}
graphics.clear();
draws();
}
function drawFunc(sx:Number,ex:Number,term=10){ //함수 그래프 그리기
//(시작x값,끝x값,간격-기본10)
var nx, ny, tx, ty;
tx = sx;
ty = 1/50*Math.pow(sx,2)+7;
graphics.lineStyle(1, 0xff00cc);
graphics.moveTo(adjustCenter(sx,"x"), adjustCenter(ty,"y"));
for(var i=sx; i < ex; i += term){
tx = i;
ty = 1/50*Math.pow(tx,2)+7;
nx = adjustCenter(tx,"x",mag);
ny = adjustCenter(ty,"y",mag);
graphics.lineTo(nx, ny);
}
}
function adjustCenter(o, XorY:String, magnificate=10){
//좌표 중앙으로 중심점 이동(원 좌표, x 혹은 y, 확대율)
//(original 좌표, x여부)
o *= magnificate;
if(XorY=="x"){
o += centerX;
}else if(XorY=="y"){
o -= centerY;
o *= -1;
}
return o;
}
function lineDraw01(mX,mY,tX,tY,style1=1,style2=0){ //선그리기 함수
//(mX,mY)위치로 이동, 그곳에서 (tX,tY)까지 style(굵기,색)대로 선그리기
graphics.lineStyle(style1, style2);
graphics.moveTo(mX, mY);
graphics.lineTo(tX, tY);
}
function drawCoordinates(cx,cy,term){ //좌표 그리기
//중심점 x,y좌표와 간격을 받아 좌표 그리기.
var i = term;
for(i=cy;i>0;i-=term){
lineDraw01(0,i,stage.stageWidth,i,1,0xcccccc);
}
for(i=cy;i < stage.stageHeight;i+=term){
lineDraw01(0,i,stage.stageWidth,i,1,0xcccccc);
}
for(i=cx;i>0;i-=term){
lineDraw01(i,0,i,stage.stageHeight,1,0xcccccc);
}
for(i=cx;i < stage.stageWidth;i+=term){
lineDraw01(i,0,i,stage.stageHeight,1,0xcccccc);
}
lineDraw01(cx,0,cx,stage.stageHeight,1,0x666666);//y축 그리기
lineDraw01(0,cy,stage.stageWidth,cy,1,0x666666);//x축 그리기
}
init(); |