In [1]:
%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

In [2]:
R = 10
k = 275
p0, q0 = [20, 0], [-20, 0]

dist = lambda p1, p2: np.sqrt( (p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 )
force = lambda r: - k / r**2

theta = np.linspace(-np.pi, np.pi, 50)

In [3]:
fig, ax = plt.subplots(figsize=(9, 5.25))

color= 'ivory'
for t in theta:
    p1 = [-R * np.cos(t), R * np.sin(t)]
    if t < np.pi * 0.5 and t > -np.pi * 0.5:
        r = dist(q0, p1)
    else:
        r = dist(p0, p1)
    F = force(r)
    ax.arrow(p1[0], p1[1], F * np.cos(t), F * np.sin(t),
             head_width=0.5, head_length=0.7,
             facecolor=color, edgecolor='silver')

ax.annotate("+", xytext=(0,0), size=30, xy=(0,0),
            ha="center", va="center", color=color)
ax.annotate(u"Satélite", xy=(25,0), xytext=(15,0),
            size=30, va="center", color=color,
            arrowprops=dict(arrowstyle="fancy",
                            facecolor=color,
                            edgecolor='silver'))
ax.set_xlim(-14, 25)
ax.set_ylim(-11, 11)
ax.plot(-R * np.cos(theta), R * np.sin(theta), linewidth=3., color='chocolate')
ax.axis('off')

fig.savefig('tidal_bulge.svg', bbox_inches='tight',
            pad_inches=0.15, transparent=True)