뉴턴의 3법칙
1) 관성의 법칙
2)힘은 질량과 가속도를 곱한값이다. 가속도의 법칙
3)작용 , 반작용 작용 반작용의 법칙
1.가속도
가속도의 법칙은 다른 말로하면 가속도는 힘과 질량을 나눈 값이다.
질량을 만든다.
/**큐브의 질량 */
this._mass = 10;
가속도에 힘과 질량을 나눈다. 이렇게 되면 같은 힘이면 무게가 무거울수록 가속도가 작아지니 더 느리게 움직인다.
this._speed = this._length / this._mass;
당연히 빨리 움직이게 하려면 add를 하는것이 아니라 현재 위치값에 곱함으로서 빨리 움직이게 한다.
(x:3 *10,y:1*10,z:0) 이렇
/**현재 위치에 속도를 곱한다. */
this._location.multiplyScalar(this._speed);
아래는 질량 20과 80을 비교한 화면이다.
하지만 여기서 관성의 법칙에따라 힘을 주면 그방향으로 영원히 이동한다.
여기서 나는 경계에 부딛히면 반대로 가지만 그마저도 큐브는 멈추지 않고 영원히 움직인다.
2)마찰력
이때 사용하는것이 마찰력이다.
마찰력은 흩어지는 힘으로 물체의 에너지를 감소시키는 힘을 의미한다.
자전거를 타든 비행기를 타든 자동차를 타든 바퀴의 마찰력을 이용해 멈춘다.
마찰력을 구한다.
마찰력은 0보다는 크고 1보다는 작아야한다. 힘이 10이면 0.6씩 곱하면서 점점 작아지게
원할한 진행을 위해 0.6이 최소인 값은 구한다.
this._friction = Math.max(1 - 0.01 * this._mass, 0.6);
여기서 나는 매 순간 마찰력이 아닌 경계에 부딛힐때마다 마찰력을 부여했다.
this._velocity.multiplyScalar(this._friction);
그러면 경계에 부딛힐때마다 점점 힘이 작아지면서 어느순간 멈추게 된다.
3)중력
하지만 현재 큐브는 중력에 의해 떨어지지 않고 우주의 공간에 있는것처럼 한 방향으로 만 움직인다.
여기서 중력을 적용하여 큐브가 질량에 따라 중력에 의해 떨어지게 설정을 한다.
중력은 아래로 떨어지게 y좌표값이 -0.1을 설정한다.
/**중력 */
this._gravity = new THREE.Vector3(0, -0.1, 0);
현재 힘에 중력을 더하되 질량이 무거울수록 더 큰 중력을 받게 설정한다.
/**중력을 더한다. */
this._velocity.add(
this._gravity.clone().multiplyScalar(this._mass * 0.01)
)
'Nature of Code' 카테고리의 다른 글
Nature of Code 3강. 진동. (0) | 2024.06.11 |
---|---|
벡터 기본 방향과 크기 (0) | 2024.06.03 |
Nature of Code 2강. 힘. (0) | 2024.05.15 |
Nature of Code 1강. 벡터. (1) | 2024.05.07 |