파이썬 AI 실습/그록3로 5분만에 테트리스+비주얼드 게임만들기

그록3로 5분만에 지구와 화성 사이를 오가는 3D 플롯 만들기

파기차차 2025. 3. 1. 15:42
728x90
반응형
SMALL

ㅁ 개요

 

O 프로그램 소개

 

 - 이번 내용은 이전 내용에서 소개한 그록3를 활용한 테트리스+비주얼드 게임 만들기에 이은 2번째 시리즈로 그록3 출시 당시 2번째로 시연했던 프로그램인  지구와 화성 사이를 오가는 3D 플롯을 직접 만들어 보는 내용이며, 이것도 5분만에 완성해 보도록 하겠습니다.

 

 

 


 

 

1.아래 사이트에 접속 후 왼쪽 메뉴에서 'Grok' 를 클릭 합니다.

 

https://x.com

 

 

 

 2. 아래와 같이 'Grok3 beta'가 선택된 상태에서 "아래의 내용을 의미하는~~~"  요청 글을 입력합니다.

 

-------------------------------------

아래의 내용을 의미하는 시뮬레이션 코드를 만들어줘
"지구에서 화성으로 발사된 우주선의 궤도를 3D 플롯으로 시뮬레이션하고 화성 착륙 후 
지구로 다시 돌아오는 궤적을 구현해줘”라는 프롬프트를 입력했다. 
이에 그록3는 해당 요청에 따라 즉석에서 코드를 생성하고 지구와 화성 사이를 오가는 
3D 플롯을 구현해냈다. 이는 단순한 데이터를 시각화하는 기능을 넘어 케플러의 법칙과 
같은 우주 공간의 복잡한 과학 원리를 접목시킨 코드를 생성하고 시뮬레이션을 통해 
구현한 과정이다. 

-------------------------------------

 

 

소스코드 1(11_1.py)

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 기본 파라미터 설정 (단순화된 천문 단위 AU 기준)
earth_orbit_radius = 1.0  # 지구 궤도 반지름 (1 AU)
mars_orbit_radius = 1.524  # 화성 궤도 반지름 (1.524 AU)
t = np.linspace(0, 2 * np.pi, 1000)  # 궤도 주기

# 지구와 화성의 궤도 (단순 타원 궤도 가정)
earth_x = earth_orbit_radius * np.cos(t)
earth_y = earth_orbit_radius * np.sin(t)
earth_z = np.zeros_like(t)  # z축은 0으로 단순화

mars_x = mars_orbit_radius * np.cos(t)
mars_y = mars_orbit_radius * np.sin(t)
mars_z = np.zeros_like(t)  # z축은 0으로 단순화

# 우주선의 궤적 (호만 전이 궤도 기반 단순화)
def transfer_orbit(r1, r2, t, outbound=True):
    a = (r1 + r2) / 2  # 전이 궤도의 반장축
    theta = np.linspace(0, np.pi, 500) if outbound else np.linspace(np.pi, 2 * np.pi, 500)
    x = a * np.cos(theta) - (a - r1)  # 중심 조정
    y = np.sqrt(a * (r2 - r1)) * np.sin(theta)  # 타원 궤적
    z = np.zeros_like(x)
    return x, y, z

# 지구 -> 화성 궤적
trans_x_out, trans_y_out, trans_z_out = transfer_orbit(earth_orbit_radius, mars_orbit_radius, t, outbound=True)

# 화성 -> 지구 궤적
trans_x_in, trans_y_in, trans_z_in = transfer_orbit(earth_orbit_radius, mars_orbit_radius, t, outbound=False)

# 3D 플롯 생성
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')

# 지구 궤도 플롯
ax.plot(earth_x, earth_y, earth_z, label='Earth Orbit', color='blue')

# 화성 궤도 플롯
ax.plot(mars_x, mars_y, mars_z, label='Mars Orbit', color='red')

# 지구 -> 화성 전이 궤적
ax.plot(trans_x_out, trans_y_out, trans_z_out, label='Earth to Mars', color='green', linestyle='--')

# 화성 -> 지구 전이 궤적
ax.plot(trans_x_in, trans_y_in, trans_z_in, label='Mars to Earth', color='purple', linestyle='--')

# 태양 위치 (원점)
ax.scatter([0], [0], [0], color='yellow', s=200, label='Sun')

# 플롯 설정
ax.set_xlabel('X (AU)')
ax.set_ylabel('Y (AU)')
ax.set_zlabel('Z (AU)')
ax.set_title('Spacecraft Trajectory: Earth to Mars and Back')
ax.legend()

# 축 범위 설정
ax.set_xlim([-2, 2])
ax.set_ylim([-2, 2])
ax.set_zlim([-0.5, 0.5])

plt.show()

 

 

 

 3.위 2번의 소스코드(소스코드1)를 code(비주얼스튜디오코드)에 복붙하여 실행하면 아래와 같이 나타납니다. 다만, 우주선이 궤도를 따라 움직이는 모습을 볼 수 없습니다.

 

 

 

 4.위 3의 단점을 보완하기위해 다시 그록3에게 아래와 같이 보완요청을 합니다.

"코드 실행 결과 우주선이 궤도를 움직이지 않는데, 움직이도록 코드 수정해줘"

 
 
 
 
소스코드 2(11_2.py, 최종 코드)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation

# 기본 파라미터 설정 (단순화된 천문 단위 AU 기준)
earth_orbit_radius = 1.0  # 지구 궤도 반지름 (1 AU)
mars_orbit_radius = 1.524  # 화성 궤도 반지름 (1.524 AU)
t = np.linspace(0, 2 * np.pi, 1000)  # 궤도 주기

# 지구와 화성의 궤도
earth_x = earth_orbit_radius * np.cos(t)
earth_y = earth_orbit_radius * np.sin(t)
earth_z = np.zeros_like(t)

mars_x = mars_orbit_radius * np.cos(t)
mars_y = mars_orbit_radius * np.sin(t)
mars_z = np.zeros_like(t)

# 우주선의 전이 궤적 (호만 전이 궤도 단순화)
def transfer_orbit(r1, r2, outbound=True):
    a = (r1 + r2) / 2  # 전이 궤도의 반장축
    theta = np.linspace(0, np.pi, 500) if outbound else np.linspace(np.pi, 2 * np.pi, 500)
    x = a * np.cos(theta) - (a - r1)
    y = np.sqrt(a * (r2 - r1)) * np.sin(theta)
    z = np.zeros_like(x)
    return x, y, z

# 지구 -> 화성 궤적
trans_x_out, trans_y_out, trans_z_out = transfer_orbit(earth_orbit_radius, mars_orbit_radius, outbound=True)

# 화성 -> 지구 궤적
trans_x_in, trans_y_in, trans_z_in = transfer_orbit(earth_orbit_radius, mars_orbit_radius, outbound=False)

# 전체 궤적 결합 (지구 -> 화성 -> 지구)
spaceship_x = np.concatenate([trans_x_out, trans_x_in])
spaceship_y = np.concatenate([trans_y_out, trans_y_in])
spaceship_z = np.concatenate([trans_z_out, trans_z_in])

# 3D 플롯 설정
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')

# 궤도 플롯
ax.plot(earth_x, earth_y, earth_z, label='Earth Orbit', color='blue')
ax.plot(mars_x, mars_y, mars_z, label='Mars Orbit', color='red')
ax.plot(spaceship_x, spaceship_y, spaceship_z, label='Spaceship Path', color='green', linestyle='--', alpha=0.5)
ax.scatter([0], [0], [0], color='yellow', s=200, label='Sun')

# 우주선 위치를 나타낼 점
spaceship, = ax.plot([], [], [], 'o', color='purple', markersize=10, label='Spaceship')

# 플롯 설정
ax.set_xlabel('X (AU)')
ax.set_ylabel('Y (AU)')
ax.set_zlabel('Z (AU)')
ax.set_title('Spaceship Trajectory Animation: Earth to Mars and Back')
ax.legend()
ax.set_xlim([-2, 2])
ax.set_ylim([-2, 2])
ax.set_zlim([-0.5, 0.5])

# 애니메이션 초기화 함수
def init():
    spaceship.set_data([], [])
    spaceship.set_3d_properties([])
    return spaceship,

# 애니메이션 업데이트 함수
def update(frame):
    spaceship.set_data(spaceship_x[frame], spaceship_y[frame])
    spaceship.set_3d_properties(spaceship_z[frame])
    return spaceship,

# 애니메이션 생성
ani = animation.FuncAnimation(fig, update, frames=len(spaceship_x), init_func=init, blit=True, interval=10)

plt.show()
 
 
 
 
 

 5. 위 4에서 나온 코드(소스코드2)를 복사하여 code편집기에 붙여넣고 실행합니다.

그러면 아래와 같이 실행되는데, 이제는 우주선(보라색 공)이 궤도를 따라 움직이는 모습을 볼 수 있습니다.

 
 
 

 

그록3에게 요청한지 단 2번 만에 지구와 화성 사이를 오가는 3D 플롯을 만들어 냈습니다.

 

정말이지 놀라지 않을 수 없을 정도로 매우 디테일이 좋습니다.(그만큼 오류가 별로 없고, 고생을 덜 합니다.)

 

앞으로는 AI챗봇 중 제가 가장 좋아하는 퍼플렉시티와 더불어 현재까지는 그록3를 가장 많이 사용하게 될 것 같습니다.

 

 

 

 

오늘은 여기까지이며, 댓글하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.

 

 

 

감사합니다.

728x90
반응형
LIST