ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 무게 중심
    공부/Physics for Game Developers 2023. 11. 28. 23:36

    1.1 뉴턴의 운동법칙

    제1운동법칙: 관성의 법칙

    - 물체는 외부의 힘을 받지 않는 한 계속 정지 또는 등속 운동을 한다.

     

    제2운동법칙: 가속도의 법칙

    - 물체에 작용한 알짜힘은 물체의 질량과 가속도의 곱과 같다.

    F = ma, 힘 = 질량 X 가속도

     

    제3운동법칙: 작용과 반작용의 법칙

    물체에 가해지는 힘(작용)에는 그와 반대되는 힘(반작용)이 존재한다.

    두 힘의 크기는 동일하고, 방향은 반대이다.

     

    1.6 질량, 질량(무게)중심, 관성모멘트

    - 질량(m) = 밀도(ρ) X 부피(V)

     

    - 무게중심(질량중심)을 계산하기 위해서는 물체를 유한 개의 작은 부분으로 나누어야 한다.

    이때, 나눈 부분을 점질량(point mass)라 한다.

    각 점질량의 질량중심 m은 공간 좌표로 표현하고 3D 공간에서는 x, y, z의 좌표로 표현된다.

    1차 모멘트를 계산하는 방법은 각 좌표축마다 원점으로부터 질량중심까지의 거리를 구한 뒤, 각 질량에 곱하면 된다.

     

    - 예시

    3 개의 물체(점질량)에 대해 무게중심을 구해보자

    각각의 물체는 1 kg, 1 kg, 2 kg 이고, 좌표는 왼쪽부터 각각 (4, 12), (6, 5), (12, 8.5) 이다.

    다음의 물체들에 대해 무게중심(x, y)는

    x = ((4 X 1) + (6 X 1) + (12 X 2)) / (1 + 1 + 2)

    y = ((12 X 1) + (5 X 1) + (8.5 X 2)) / (1 + 1 + 2)

    무게중심(x, y) = (8.5, 8.5)

    물체의 무게중심

     

     

    - 위 내용을 대충 아래와 같은 코드로 표현할 수 있다.

    #include "Vector.h"
    const int _NUMELEMENTS = 10;
    
    typedef struct _PointMass
    {
        float mass;
        Vector designPosition;
        Vector correctedPosition;
    } PointMass;
    
    PointMass Elements[_NUMELEMENTS];
    
    void GetCombinedCG()
    {
        int  i;
        float TotalMass;
        Vector CombinedCG;
        Vector FirstMoment;
    
        TotalMass = 0;
        for (i = 0; i < _NUMELEMENTS; i++)
            TotalMass += Elements[i].mass;
    
        FirstMoment = Vector(0, 0, 0);
        for (i = 0; i < _NUMELEMENTS; i++)
        {
            FirstMoment += Elements[i].mass * Elements[i].designPosition;
        }
        CombinedCG = FirstMoment / TotalMass;
    }

     

    각 점질량의 상대위치 또한 계산 가능하다.

    '공부 > Physics for Game Developers' 카테고리의 다른 글

    파티클 동역학  (3) 2023.12.03
    Vector Class  (0) 2023.11.26
    Collision Detection Using the Separating Axis Theorem  (0) 2023.11.10
Designed by Tistory.