Silverback9

#야생으로

Creative Coding 독학 제014일 2024년04월09일(화)

오늘은 힘에 대해서 공부를 시작해 보겠습니다. Yeah!

힘에 관련한 뉴튼의 세 가지 법칙을 살펴 보면서, 힘이 물체에 작용하여 물체를 움직이게 되는 과정을 오일러 적분 알고리즘을 통해 구현해 볼게요~^^*

Force Law #1: 가만히 있는 물체는 가만히 있으려고 하고 움직이는 물체는 같은 방향과 속도로 계속 움직이려고 합니다.

Force Law #2: 물체에 가해지는 힘에 물체의 질량을 곱하면 물체의 가속도가 됩니다.

Force Law #3: 같은 크기이면서 서로 반대방향으로 작용하는 한 쌍의 힘이 항상 물체에 작용합니다.

오일러 적분은 초당 30개의 시간간격이 발생하는 p5.js의 화면변화처럼, 큰 단위 (30/sec)의 시간을 다루기에 적합합니다. 그래서, 표현할 수 없을 정도록 아주 미세한 시간을 다루는 미분법이 아니라, 오일러 적분을 사용해서, 사람 눈에 자연스럽게 표현하기에 쉽고 빠른 알고리즘을 기반으로 프로그램을 만들어 볼게요~^^* 방법은~

(1) 힘을 질량으로 나누어 가속도를 얻는다. (2) 속도에 가속도를 더한다. (3) 변화된 이 속도를 위치에 더하여 위치를 변화시킨다. 참~ 쉽죠~^^* 이 순간 밥 아저씨의 목소리가 들리시나요?

힘에 대한 공부 그 첫 날인 오늘은 동그라미에 가해지는 중력을 프로그램으로 구현해 보겠습니다.

아래 동영상을 클릭하셔서 12분40초까지만 보시면 오늘 공부 끝~^^* 노트도 참고해 보시면 좋겠죠~^^*

class Mover{
  constructor(x,y){
    this.pos = createVector(x,y);
    this.vel = p5.Vector.random2D(); 
    this.vel.mult(random(3)); 
  }
  applyForce(force){
    this.acc = force; 
    //질량 1을 가진 동그라미에 가해지는 힘은 그대로 가속도가 된다.
    //Acceleration = Force * 1; 
  }
  update(){
    this.vel.add(this.acc);
    this.pos.add(this.vel); 
  }
  show(){
    stroke(255);
    strokeWeight(2);
    fill(255, 100);
    ellipse(this.pos.x, this.pos.y,32);
  }
}
let mover;

function setup() {
  createCanvas(400, 400);
  mover = new Mover(200,200); 
}

function draw() {
  background(0);
  
  let gravity = createVector(0,1); 
  //벡터 중력은 x축 작용은 없고 y축 아래방향으로 작용(p5.js 캔버스의 원점은 왼편 위쪽 모서리이므로, y 값의 증가는 아래방향으로의 이동을 의미한다.)

  mover.applyForce(gravity);
  //중력이 동그라미에 가해지는 외부의 힘으로 작용하도록, Class mover 안에 정의된 함수 applyForce()를 호출하며 벡터 gravity를 파라미터로 넣는다. 
  
  mover.update();
  mover.show();
  
}

이것을 클릭하셔서 mover.js 파일과 sketch.js 파일을 열어 코드를 살펴보시고, 삼각형을 눌러 프로그램을 실행해 보세요. 중력에 영향 받아 아래로 떨어지는 동그라미의 움직임을 관찰해 보세요. 사각형을 눌러 종료하시구요~^^*

오늘 우리가 만난 오일러님, 좀더 자세히 알아볼까요? 이것을 클릭해 보셔요~

We don’t make mistakes. We have happy accidents. 따뜻한 목소리와 미소를 가진 밥 아저씨를 다시 만나 볼까요?

오일러님과 밥 아저씨를 다시 뵈면서, 이 세상의 어느 작은 문제에 대한 솔루션 하나라도, 작은 아름다움 하나라도 기여할 수 있는 사람이 되고 싶다는 소망을 소중하게 매만지게 됩니다. 우리 함께 공부하며 계속 걸어요~^^*.

꿈은 이루어 집니다!

함께 공부해 주셔서 감사합니다~^^*

댓글 남기기