이전글 : 프로세싱 수학함수1 


프로세싱에서 사용되는 수학함수와

삼각함수를 이용하여 원을 그려보자.


---------------------------------------------------------------------------------------------------

void setup() {

size(480, 320);

background(255);

// noLoop();

}

 

void draw() {

println(PI);               // 3.14

println(TWO_PI);     // 2*3.14

println(HALF_PI);    // 3.14/2

println(QUARTER_PI);    // 3.14/4

println(radians(90));        //일반각을 호도법으로

println(degrees(PI));       // 호도법을 일반각으로

println(degrees(radians(90)));   // 결국 90도

println(cos(PI));    // -1

println(sin(PI));    //  0

println(cos(radians(45)));    

println(sin(radians(45)));

println(tan(radians(45)));

println(acos(0.5));   // cos값이 0.5인 각도

println(asin(0.5));

println(atan(1));     //tan 값이 1인 각도는 45도 -> PI/4

println(atan2(mouseY-200,mouseX-200));  

                                  //atan2(y,x)는 x축에서 좌표 (x,y)의 각을 라디안으로 구함 

                                  // 단 atan2()함수는 y값 먼저 쓴다는 것에 주의!!

                                  // 즉, 위 함수는 (200,200)점을 원점으로 

                                  // 마우스의 x,y좌표의 각도를 구함

 

/*삼각함수를 이용한 원그리기

x= 중심x + (sin(각)*반지름);

y= 중심y + (cons(각)*반지름);  */


stroke(10);

int radius = 100;

for (int deg = 0; deg < 360; deg += 10) {

float angle = radians(deg);

float x = 200 + (cos(angle) * radius);

float y = 200 + (sin(angle) * radius);

//point(x,y);    // 0~360사이에 10도 간격으로

                  // 중심점이 (200,200)이고 

                  // 반지름이 100인 점을 찍어 원을 그림

ellipse(x, y, 3, 3);   // 10도 간격으로 작은 원을 그려 반지름이 100인 큰원을 표현

}

}

-------------------------------------------------------------------------------------------


화면




프로세싱 레퍼런스 http://processing.org/reference/


Trigonometry
acos()
asin()
atan()
atan2()
cos()
degrees()
radians()
sin()
tan()

프로세싱 키보드값과 특수키값 출력


프로세싱을 통해 키보드에서 입력 받은 

키의 값 또는 특수키 값을 출력해보자


스케치 소스

--------------------------------------------------------------------------------------

void draw(){
}
void keyPressed(){
  if(key== CODED){     //자판으로 입력받은 키가  특수키(alt, ctrl, up, down...)인지를 물어봄
    println("Keycode = " + keyCode);     // 그렇다면 특수키의 keycode 값을 출력
  }
  else{
    println("key = " + key);       // 일반 키라면 그대로 눌러진 키출력 즉 a 입력시 "key = a" 로 출력
    //println("key = " + keyCode); 라면 a 입력시 "key = 65" 출력됨
  }                                        
}

--------------------------------------------------------------------------------------


화면





프로세싱 레퍼런스 http://processing.org/reference/

Keyboard
key
keyCode
keyPressed()
keyPressed
keyReleased()
keyTyped()

마우스 이동제한


물체가 마우스를 따라다니며

이 물체는 정해진 경계에서만 따라다니도록 한다.


스케치 소스

--------------------------------------------------------------

float mx;

float my;

float easing = 0.05;

int radius = 24;       // 마우스를 따라다닐 원의 반지름

int edge = 56;

int inner = edge + radius;


void setup(){

  size(480,320);

  noStroke();

  smooth();

  ellipseMode(RADIUS);

  rectMode(CORNERS);

}


void draw(){

  background(255);

  

  if(abs(mouseX-mx)>0.1){                  // 마우스의 x위치와 mx값이 0.1이라도 차이가 있으면

    mx = mx + (mouseX -mx)*easing;     //mx값을 재계산 이전mx값에 (mouseX-mx)*0.05 값 만큼 보정

                                                       // 결국 mx값은 현재의 마우스 x좌표 값으로 수렴함.

                                                        // (mouseX-mx)차이가 클수록 빨리 수렴함.

  }

  if(abs(mouseY-my)>0.1){

    my = my + (mouseY -my)*easing;

  }


  mx = constrain(mx,inner, width-inner);     // mx 값을 아래 사각형 너비 값으로 제한

  my = constrain(my,inner, height-inner);    // my 값을 아래 사각형 높이 값으로 제한

  fill(150);

  rect(edge,edge,width-edge,height-edge);

  fill(255);

  ellipse(mx,my,radius,radius);      // mx,my를 중점으로 24의 반지름을 갖는 원

-------------------------------------------------------------------------------------------


영상


+ Recent posts