카테고리 없음

After Effects에서 케플러법칙을 만족하는 행성운동 시각화

the empty park 2023. 12. 31. 14:15

 

 

케플러 2법칙에 맞게 행성의 운동을 시각화 하는것은 생각보다 간단치 않다. chat GPT에 물어보면, 아마도 타원을 극좌표로 표현한 후 \( \theta \)에 time depence를 넣은 코드를 주면서 그걸 position에 입력하라고 할 가능성이 높다. 하지만 그건- 타원위를 따라 도는 animation은 맞지만, 케플러법칙에 맞게 동일시간-동일면적을 따르는 motion은 아니다.

 

나는 chat GPT와의 수차례의 상호작용을 통해 만족할만한 결과를 얻었는데, 다음 code를 position에 입력하면 된다 :

 

var a = 300; // Semi-major axis
var e = 0.5; // Eccentricity
var n = 2; // Mean motion (adjust as needed)
var t0 = 0; // Starting time (adjust as needed)

function solveKepler(M, e) {
    var E = M; // Initial guess: E = M is a common starting point
    var delta = 0.000001; // Tolerance for convergence
    var maxIter = 100; // Maximum number of iterations
    var iter = 0;

    while (iter < maxIter) {
        var f_E = E - e * Math.sin(E) - M;
        var f_prime_E = 1 - e * Math.cos(E);
        var E_new = E - f_E / f_prime_E;

        // Check for convergence
        if (Math.abs(E_new - E) < delta) {
            break;
        }

        E = E_new;
        iter += 1;
    }

    return E;
}

// Current time
var t = time;

// Calculate the Mean Anomaly
var M = n * (t - t0);

// Solve for the Eccentric Anomaly
var E = solveKepler(M, e); // You need to implement solveKepler

// Calculate the True Anomaly
var theta = 2 * Math.atan2(Math.sqrt(1 + e) * Math.sin(E / 2), Math.sqrt(1 - e) * Math.cos(E / 2));

// Radius
var r = a * (1 - e * e) / (1 + e * Math.cos(theta));

// Convert to Cartesian Coordinates
var x = r * Math.cos(theta) + 1280/2;
var y = r * Math.sin(theta) + 720/2;

[x, y]
result :

 

개인적으론, 타원의 위치를 잡아주는데 좀 어려움을 겪었다. 마지막 ‘Convert to Cartesian Coordinates’ 부분에서 xy좌표를 조정해주지 않으면, 아마도 타원이 화면 밖 엉뚱한 곳에 가있을 가능성이 크다. 코딩을 일일히 손으로 짠게 아니라 기본적으로 chat GPT를 이용했는데, 초점위치를 깔끔하고 정확하게 지정해주는 방법은 아직 알지 못하고, 그냥 x,y값을 적절히 조정하면서 맞추는 식으로 작업했다.

 

헌데 이 작업을 하면서 문득 - 학부나 대학원 고전물리 시간때 kepler 법칙을 만족하는 행성의 움직임을 수식으로 정확히 나타내본적이 있는지 궁금해졌다. 물론 central force에 대한 많은 내용을 배우긴 했지만, 그 속엔 생각보다 공부할 것도 많고 수학적 복잡성도 크다는 사실을 느꼈다. 조만간 시간이 나면, goldstein 교재를 펼쳐들고 cental force 내용들을 다시한번 공부해보려 한다.