Silverback9

#야생으로

Creative Coding 독학 제086일 2024년06월21일(금)

네~~~오늘은 용수철에 매달린 추의 움직임을 표현하는 프로그램 공부 1단계입니다!

천릿길도 한 걸음부터~~~

오늘은 용수철에 매달린 추의 운동만 공부해 보도록 할게요~^^*

아래 동영상 강의를 5:07까지 보시면 오늘 공부 끝~~^^*

Hooke님의 공식은?

네~~ F(spring) = (-1) * k * x 였지요~~?

(1) 잡아당기는 힘과 반대 방향으로 움직여 원래자리로 되돌아가려는 힘이 F(sping)이기 때문에, 잡아당기는 힘 k*x에 마이너스 1을 곱하게 되어요~~

(2) k는 탄성계수이고, 용수철을 이루고 있는 물질 마다 탄성계수는 다르지요?

(3) x는 용수철에 매달려 가만히 있던 추를 잡아당겨 용수철이 원래길이에서 늘어나게 된 길이입니다~

탄성계수가 크다는 것은 원래대로 되돌아 가려는 성질이 강하다는 것이고, 따라서 잘 안늘어난다는 것일 수 있겠네요.

탄성계수가 큰 물체를 많이 늘인다는 것은 그 만큼 큰 힘이 들어간다는 것일 텐데요.

그러다 보니, 잡아당기는 힘은 탄성계수와 비례관계, 늘어난 길이와도 비례관계에 놓여 있을 것 같아요.

그럼~~곱셈관계이겠네요~~^^*.

그래서 F(잡아당기는 힘) = k* x 으로 표현할 수 있을 것 같아요.

그런데, 용수철의 힘은 늘어난 상태에서 늘어나지 않은 상태로 되돌아 가려는 힘이니까, 잡아당기는 힘과 크기는 같지만 방향은 반대일 것 같아요.

그래서!!!

F(spring) = (-1) * k * x;

정리되는 것 같아요.

k는 물질마다 달라서, 우리가 상수로 프로그램에 입력해 주어야 할 것 같구요.

x는 어떻게 구할 수 있을까요?

x는 용수철이 늘여진 량, 즉 용수철 길이의 변화량을 의미하는 것이잖아요.

그래서, 늘어난 현재의 추의 위치값에서 늘어나지 않았던 과거의 추의 위치값을 빼면 될 거 같은데, 어떠셔요?

용수철이 늘어나지 않은 상태에서의 추의 위치값을 restlength라고 이름지어 본다면,

용수철이 늘어난 지금의 추의 위치값 y에서 restlength를 빼면 될 것 같아요!!!

x = y – restlength;

로 표현하면 될 것 같습니다~~^^*

용수철의 원래길이 restlength는 상수로 입력해 주면 될 것 같아요~~^^*

참! 이때 x는 늘어난 길이분량을 의미하는 것이지, 추의 x죄표값을 의미하지는 않겠네요!

이제 우리는 용수철에 매달린 추의 운동 가속도를 생각해 봐야 할 것 같아요.

F = MA 기억나시죠~~~^^*

추의 질량을 1로 처리하면,

F = A 가 되고,

용수철의 되돌아가려는 힘에 의해 추가 움직이게 되는 것이니까~~

용수철의 힘이 추의 운동가속도가 될 수 있겠네요~^^*

그래서!!!

Acceleration(bob) = Force(spring)

이 될 것 같습니다.

그러면 이제 우리는 훌륭하신 오일러님을 따라,

추의 운동가속도가 추의 운동속도에 영향을 주고,

추의 운동속도가 추의 위치에 영향을 주게 되는 것이죠!!!

그리고 우리는 추의 위치를 그림으로 표현하게 되고,

추의 움직임의 변화를 보여주는 프로그램이 완성되겠네요!!!!

그래서 정리를 해보면, 아래 노트내용이 될 것 같아요!

코드도 살펴 볼까요~~^^*

let restlength = 200; 
//잡아당기지 않았을 때의 추의 위치입니다. 용수철 원래길이가 되겠네요. 

let bobY = 350;
//추를 y좌표 350까지 잡아당긴 상태에서 시작하겠습니다. 

let k = 0.01;
//용수철의 탄성계수를 0.01로 잡아보겠습니다. 

let bobVelocity = 0;
let bobAcceleration = 0;

function setup() {
  createCanvas(400, 400);
}

function draw() {
  background(220);
  fill(125, 255, 125);
  line(200, 0, 200, bobY);
  circle(200, bobY, 64);
  
  let x = bobY - restlength;
  //용수철이 늘어난 상태에서의 추의 위치값에서 용수철이 늘어나지 않은 상태에서의 추의 위치값을 빼서, 용수철의 길이 변화량을 계산합니다. 
  
  let springForce = (-1) * k * x;
  //탄성이 높을 수로 힘이 더 많이 들고, 많이 늘일 수록 힘이 더 많이 듭니다.비례관계이므로 곱셈을 하겠습니다. 
  //용수철을 당기는 힘과 용수철이 원래자리로 되돌아가려는 힘은 방향이 반대이므로 (-1)을 곱하겠습니다. 
  
  bobAcceleration = springForce;
  //용수철의 원래자리로 되돌아가려는 힘이 추의 운동가속도가 됩니다. 
  
  bobVelocity += bobAcceleration;
  bobY += bobVelocity;
  //가속도는 속도에, 속도는 위차값에 영향을 줍니다. 
  
  bobVelocity *= 0.99;
  //공기저항을 반영하겠습니다. 

}

추를 잡아당겨 봅시당~~~~^^*

용수철에 매달린 진자를 공부하러 가는 길.

자전거를 타고 함께 출발해 주셔서 감사합니다!

시원하고 조용한 공간에서 코딩 공부를 하고 있으니, 어깨에 시원한 빗방울이 떨어지는 듯 해요~~^^*

오늘은 걸음마를 겨우 배웠지만, 내일은 우리 달리기를 배우게 될까요?

공부 내용이 점점 복잡해 지겠지만…

뒤뚱뒤뚱 아장아장 넘어져도 끄응차 다시 일어나서 또 함께 걸어가기로 해요~~^^*

네!!! 꿈은 이루어 집니다!!!

댓글 남기기