Machineboy空

곡선 관련 공식들: 각속도(Angular Velocity), 자유 낙하(Free fall), 포물선 공식(Parabola) 본문

Game/게임 수학

곡선 관련 공식들: 각속도(Angular Velocity), 자유 낙하(Free fall), 포물선 공식(Parabola)

안녕도라 2023. 9. 19. 13:20

1) 각속도(Angular Velocity)

회전하는 물체의 단위시간당 각위치

어떤 점의 둘레를 Ts 동안에 일주하는 물체의 각속도는 2π/T rad/sec이다. 

* 원의 둘레/ 시간 = 2πr / t

 

// 잡은 물체를 던질 때 손의 궤적(?)이 곡선일테니까.
// 직선 속도 공식이 아닌 각속도 공식을 이용한다.

handAngularVelocity = radian / Time.fixedDeltaTime * axis;

 

2) 자유 낙하(Free fall)

뉴턴 역학에서 오직 중력만이 작용하는 물체의 운동

정지한 물체를 놓고, 오직 중력에 의해서만 낙하하는 상태

  • 낙하는 통상적으로 밑으로 향하는 운동을 의미
  • 뉴턴 역학의 자유낙하는 중력의 방향에 따라 반드시 밑을 향하지는 않을 수 있다.
    • 예) 달의 궤도가 지구를 향하지는 않지만 달은 자유낙하를 하고 있다.
  • 처음엔, 높이만 있고 속력이 없기 때문에 위치 에너지만 갖고 있다.
  • 낙하하기 시작하면서 위치에너지 감소, 운동에너지 증가
    • => 에너지의 전환에 의해 물체가 떨어질 수록 속력이 커진다.
    • 지면에 도달하기 직전에 위치 에너지는 모두 운동에너지로 전환되어 가장 빠른 속력을 갖게 된다.
  • 처음 속도가 0인 낙하 운동 (처음 속도 v0, 가속도 g)
    • v=v0+at → v=gt
 //gravity: Vector3.down
 //velocity: Vector3.forward
 //points: 그 점들을 이은 것
 
 void UpdateTeleport()
{
     RaycastHit hitInfo = new RaycastHit();
     bool canTeleport = false;

	List<Vector3> posints = new List<Vector3>();
    Vector3 gravity = new Vector3(0, -9.81f, 0);
    Vector3 velocity = transform.forward * 10;
    Vector3 pos = transform.position;
    
    float dt = Time.fixedDeltaTime;
    posints.Add(pos);
    
            for (int i = 0; i < pointCount - 1; i++)
            {
                //// 자유낙하공식 -0.5f * g * t * t
                //pos += velocity * Time.fixedDeltaTime + 0.5f * gravity * dt * dt;
                //dt += Time.fixedDeltaTime;
                
                // 점프공식
                pos += velocity * dt;
                velocity += gravity * dt;
                Vector3 prePos = posints[posints.Count - 1];
                Vector3 dir = prePos - pos;
                Ray ray = new Ray(prePos, dir.normalized);
                RaycastHit hit;
                
                // 만약 이전위치와 현재위치 사이에 충돌체가 있다면 그 부딪힌 지점을 추가하고 그만 그리고싶다.
                if (Physics.Raycast(ray, out hit, dir.magnitude))
                {
                    posints.Add(hit.point);
                    hitInfo = hit;
                    marker.position = hit.point;
                    marker.up = hit.normal;
                    canTeleport = true;
                    break;
                }
                // 그렇지 않으면 계산한 위치를 목록에 추가하고싶다.
                posints.Add(pos);

            }
            
            lr.positionCount = posints.Count;
            lr.SetPositions(posints.ToArray());
            }
}

3) 포물선 공식

'Game > 게임 수학' 카테고리의 다른 글

Vector 연산 기초  (1) 2024.09.30
오른손 좌표계와 왼손 좌표계  (0) 2024.06.23
속도(speed) vs 속력(velocity)  (0) 2023.09.20
Quaternion과 Euler angle  (0) 2023.09.06