After Effects에서 케플러법칙을 만족하는 행성운동 시각화
케플러 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 내용들을 다시한번 공부해보려 한다.
⸬