Are the planets in the TRAPPIST-1 system so close that inhabitants on one planet could see surface details on the other planets?
Yes!
How big would each planet appear from each of the other planets during conjunction or opposition? Bigger than Earth's moon?
For some combinations, definitely!
Here's a diagram of the size of each of the planets as seen from each of the other planets. I've taken the semi-major axes and planet radii from a table in Wikipedia and used the Python script below to show the apparent sizes at conjunction or opposition. The axes are labeled in degrees and the largest case is 1.28 degrees or 2.5 times the apparent size of the Moon from Earth!
a (Gm) R (km)
b: 1.73 7150
c: 2.37 6984
d: 3.33 5000
e: 4.38 5804
f: 5.76 6671
g: 7.01 7322
h: 9.27 4930
For example, the top row shows the largest possible size of planets c through h from planet b. The black dots indicate the planet with itself.
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/5CGCM.png)
import numpy as np
import matplotlib.pyplot as plt
data = (('b', 1.73, 7150), ('c', 2.37, 6984), ('d', 3.33, 5000),
('e', 4.38, 5804), ('f', 5.76, 6671), ('g', 7.01, 7322),
('h', 9.27, 4930)) # https://en.wikipedia.org/wiki/TRAPPIST-1#Planetary_system_data_charts
class Planet(object):
def __init__(self, name, a_Gm, r_km):
self.name = name
self.a = 1E+09 * a_Gm
self.r = 1E+03 * r_km
halfpi, degs = 0.5*np.pi, 180/np.pi
planets = []
for thing in data:
planets.append(Planet(*thing))
arc = np.vstack([f(np.linspace(halfpi, -halfpi, 201)) for f in (np.cos, np.sin)])
f = np.array([-1.0, 1.0])[:, None]
c = np.array([+0.8, 1.0])[:, None]
full = np.hstack((arc, f*arc[:, -2::-1]))
crescent = np.hstack((arc, c*arc[:, -2::-1]))
all_sizes = []
for p in planets:
p.arcs = []
for pp in planets:
if pp == p:
p.arcs.append(None)
else:
size = 2*pp.r/(pp.a-p.a)
all_sizes.append(abs(size))
if size > 0:
p.arcs.append(size*full)
else:
p.arcs.append(size*crescent)
max_size = max(all_sizes)
print('max_size: ', max_size)
if True:
plt.figure()
for (i, p) in enumerate(planets):
y0 = -max_size * degs * i
for (j, arc) in enumerate(p.arcs):
x0 = max_size * degs * j
if type(arc) is type(None):
plt.plot([x0], [y0], 'ok', markersize=6)
else:
x, y = degs*arc
plt.plot(x+x0, y+y0)
plt.gca().set_aspect('equal')
plt.show()