#!/usr/bin/env python3.5
# Scientific libraries
from matplotlib import pyplot as plt
import numpy as np
from matplotlib.patches import FancyArrowPatch
from mpl_toolkits.mplot3d import proj3d
# Torus
angle = np.linspace(0, 2 * np.pi, 60)
theta1, theta2 = np.meshgrid(angle, angle)
r, R = 0.25, 1.5
X = (R + r * np.cos(theta2)) * np.cos(theta1)
Y = (R + r * np.cos(theta2)) * np.sin(theta1)
Z = r * np.sin(theta2)
# Hamiltonian system in action and angular variables
omega1 = 5
omega2 = 2
t = np.arange(0, 150, 0.01)
theta1 = omega1*t
theta2 = omega2*t
x = (R + r * np.cos(theta1)) * np.cos(theta2)
y = (R + r * np.cos(theta1)) * np.sin(theta2)
z = r * np.sin(theta1)
# Figure
fig = plt.figure()
ax = fig.gca(projection = '3d')
plt.setp(ax.get_xticklabels(), visible=False)
plt.setp(ax.get_xticklines(), visible=False)
plt.setp(ax.get_xgridlines(), visible=False)
plt.setp(ax.get_yticklabels(), visible=False)
plt.setp(ax.get_yticklines(),visible=False)
plt.setp(ax.get_zticklabels(), visible=False)
plt.setp(ax.get_zticklines(),visible=False)
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_zticklabels([])
ax.grid(False)
ax.set_xlim3d(-1.5, 1.5)
ax.set_ylim3d(-1.5, 1.5)
ax.set_zlim3d(-1, 1)
ax.plot_surface(X, Y, Z, color = 'g',alpha=0.05, rstride = 3, cstride = 3)
ax.plot(x,y,z)
ax.set_title(r'$ \omega_1 = '+str(omega1)+r', \omega_2 = '+str(omega2)+r' $')
ax.text(1, 0.02, 0.02, 'Copyright - Guillaume Cantin - 2016',
verticalalignment='bottom', horizontalalignment='left',
transform=ax.transAxes,
style='italic',
color='gray',
fontsize=6,
alpha=0.2)
plt.close(fig)