If you're seeing this message, it means we're having trouble loading external resources on our website.

웹 필터가 올바르게 작동하지 않으면 도메인 *. kastatic.org*.kasandbox.org이 차단되어 있는지 확인하세요.

주요 내용

각 속도가 있는 진동

현실 세계에서 일어나는 현상을 묘사하려면 진동, 진폭, 주파수/주기 개념을 이해해야 합니다. 그러나 약간 더 쉽게 코딩하면서 똑같은 결과물을 만드는 방법이 있습니다. 진동 공식을 한 번 더 살펴봅시다.
var x = 진폭 * sin(TWO_PI * 프레임 총 수 / 주기);
약간 다르게 써봅시다.
var x = 진폭 * sin(천천히 증가하는 어떤 값);
진동주기를 프레임수로 정의할 때는 위 공식이 필요할 수도 있습니다. 그러나 각운동 수업 때 배운 각속도(와 각가속도)의 개념을 이용하면 예제를 쉽게 만들 수 있습니다. 우선 다음과 같이 가정해봅시다.
var angle = 0;
var aVelocity = 0.03;
...draw()에서 간단하게 다음과 같이 나타낼 수 있습니다.
angle += aVelocity;
var x = amplitude * sin(angle);
...angle은 “천천히 증가하는 어떤 값”입니다.
프로그램을 수정하면 다음과 같은 결과가 나옵니다:
직접 참조하지 않았다고 해서 주기의 개념이 사라지는 것은 아닙니다. 결국, 각속도가 크면 클수록 원은 더 빨리 진동합니다 (주기가 줄어듭니다). 사실 TWO_PI에 도달할 때까지 각속도를 더하는 횟수가 주기입니다.
주기 = TWO_PI / 각속도
이 예제를 약간 더 확장해서 Oscillator 객체를 만들어봅시다. (위와 같이)x축과 y-축을 따라서 진동이 발생하도록 만든다고 가정해봅시다. 이때 두 개의 각도, 두 개의 각속도, 두 개의 진폭 (축마다 하나씩)이 필요합니다. 여기서 또 PVector를 쓰게 될 것 같군요!
아래 프로그램의 코드를 한 번 읽어 보시기 바랍니다:

본 "내추럴 시뮬레이션" 과정은 다니엘 쉬프만(Daniel Shiffman)이 저술한 "The Nature of Code"의 내용을 차용한 것이며, 본 내용물의 저작권은 Creative Commons Attribution-NonCommercial 3.0 Unported License를 적용합니다.