# -*- coding: utf-8 -*-
#
# Script to generate a set of epicycloidal curve.
#
# Guillaume Jacquenot
# 2013 03 20
import numpy as np
import matplotlib
from matplotlib.pyplot import figure, show, rc, grid, legend
def epicycloid(r1=1,r2=1, theta = np.arange(0.0,2*np.pi,0.005)):
x = (r1+r2)*np.cos(theta)-r2*np.cos((r1+r2)/r2*theta)
y = (r1+r2)*np.sin(theta)-r2*np.sin((r1+r2)/r2*theta)
return x,y
def makePlot(outputFilename = r'Epicycloid2_vectorial.svg'):
rc('grid', linewidth = 0.75, linestyle = '-', color = '#a0a0a0')
rc('xtick', labelsize = 12)
rc('ytick', labelsize = 12)
rc('font',**{'family':'serif','serif':['Palatino'],'size':12})
rc('text', usetex=True)
fig = figure()
ax = fig.add_axes([0.12, 0.12, 0.76, 0.76])#axisbg='#d5de9c'
x,y = epicycloid(r2=1.0/4.0)
ax.plot(x, y, color='#ee8d18', lw = 1.5, label=r'$r_2=1/4$')
x,y = epicycloid(r2=1.0/3.0)
ax.plot(x, y, color='m', lw = 1.5, label=r'$r_2=1/3$')
x,y = epicycloid(r2=1.0/2.0)
ax.plot(x, y, color='c', lw = 1.5, label=r'$r_2=1/2$')
x,y = epicycloid(r2=1.0)
ax.plot(x, y, color='g', lw = 1.5, label=r'$r_2=1$')
x,y = epicycloid(r2=2.0, theta = np.arange(0.0,4*np.pi,0.005))
ax.plot(x, y, color='r', lw = 1.5, label=r'$r_2=2$')
x,y = epicycloid(r2=3.0, theta = np.arange(0.0,6*np.pi,0.005))
ax.plot(x, y, color='b', lw = 1.5, label=r'$r_2=3$')
ax.set_aspect('equal')
grid(True)
box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1,
box.width, box.height * 0.9])
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.08),
ncol=3)
ax.set_xlabel('$x$')
ax.set_ylabel('$y$',rotation=0)
ax.set_title(r'\begin{tabular}{lcll}'+\
r'$x$ &=&$(r_1+r_2) \cos\theta - r_2 \cos\left(\frac{r_1+r_2}{r_2}\theta\right)$&, $r_1=1$\\'+\
r'$y$ &=&$(r_1+r_2) \sin\theta - r_2 \sin\left(\frac{r_1+r_2}{r_2}\theta\right)$&, $r_1=1$'+\
r'\end{tabular}',
fontsize=12)
fig.savefig(outputFilename)
fig.show()
makePlot()