Expected Triangle Area in a Disk
Result
For three independent uniform points inside a disk of radius $R$,
$$ E[A]=\frac{35}{48\pi}R^2. $$For the unit disk, $E[A]=35/(48\pi)$.
Illustration
(Generated by scripts/generate_expected_triangle_area_illustration.py.)
Setup and notation
Let $D_R=\{(x,y)\in\mathbb{R}^2:x^2+y^2\le R^2\}$ be the disk of radius $R$ (centered at the origin), with area $S=\pi R^2$.
Let $P_1,P_2,P_3$ be i.i.d. uniform random points in $D_R$. Write
$$ P_i=(X_i,Y_i), $$and (when convenient) use the equivalent lower-case notation $(x_i,y_i)$ for coordinates of $P_i$.
In polar coordinates, we can write $P_i=(r_i\cos\theta_i,r_i\sin\theta_i)$, where to be uniform over area we may sample
$$ U_i\sim U[0,1],\quad r_i=R\sqrt{U_i},\quad \theta_i\sim U[0,2\pi), $$independently for $i=1,2,3$.
Let $A$ be the (unsigned) area of the triangle with vertices $P_1,P_2,P_3$. By the shoelace formula,
$$ A=\frac12\left|X_1(Y_2-Y_3)+X_2(Y_3-Y_1)+X_3(Y_1-Y_2)\right|. $$The point density is $f(P)=\frac{1}{\pi R^2}$ for $P\in D_R$ and $0$ otherwise.
Finally, for the outline below, let $E_{\text{in}}$ denote the unconditional expected area $E[A]$. Let $E_{1\_on\_bd}$ denote the expected area when one point is conditioned to lie on the boundary circle $\partial D_R$ (uniform in angle) and the other two points are uniform in $D_R$; similarly define $E_{2\_on\_bd}$ and $E_{3\_on\_bd}$.
Key ideas (outline)
Uniform sampling in polar coordinates. To be uniform over area, $r=R\sqrt{U}$ with $U\sim U[0,1]$, and $\theta\sim U[0,2\pi)$, because $dA=r\,dr\,d\theta$.
The direct integral is hard. Writing the area using the shoelace formula gives a six-dimensional integral with absolute value, which is tedious. The full expectation can be written as
$$ E[A]=\int\!\!\int\!\!\int \frac{1}{2}\left|X_1(Y_2-Y_3)+X_2(Y_3-Y_1)+X_3(Y_1-Y_2)\right| \,f(P_1)f(P_2)f(P_3)\,dP_1\,dP_2\,dP_3, $$where $f(P)=\frac{1}{\pi R^2}$ on the disk and $0$ otherwise.
Crofton-style dimensional reduction. Let $S=\pi R^2$ and $M=S^3=\pi^3R^6$ be the total configuration measure for three points. The weighted integral is $F(R)=M\cdot E[A]=\int_{D_R^3}A\,dP_1\,dP_2\,dP_3$, which scales as $R^8$. Differentiating:
$$ F'(R)=\frac{8}{R}F(R). $$Increasing $R$ by $dR$ forces at least one point to lie on the boundary circle of length $L=2\pi R$, so
$$ F'(R)=3\cdot L\cdot S^2\cdot E_{1\_on\_bd}. $$Equating gives $E_{\text{in}}=\frac{3}{4}E_{1\_on\_bd}$.
Repeat the reduction. Moving points to the boundary iteratively yields the chain
$$ E_{\text{in}}=\frac{3}{4}E_{1\_on\_bd},\qquad E_{1\_on\_bd}=\frac{5}{9}E_{2\_on\_bd},\qquad E_{2\_on\_bd}=\frac{7}{16}E_{3\_on\_bd}. $$Boundary condition. For three points on the circumference, $E_{3\_on\_bd}=\frac{3R^2}{2\pi}$ (a classic result).
Combine.
$$ E[A]=\left(\frac{3}{4}\right)\left(\frac{5}{9}\right)\left(\frac{7}{16}\right) \left(\frac{3R^2}{2\pi}\right)=\frac{35}{48\pi}R^2. $$
Quick Monte Carlo check (Python)
In the code below, the variables x1, y1, x2, y2, x3, y3 correspond to
$X_1,Y_1,X_2,Y_2,X_3,Y_3$ in the notation above.
import numpy as np
import matplotlib.pyplot as plt
def calculate_expected_area(radius=1.0, num_samples=1_000_000):
u = np.random.uniform(0, 1, (num_samples, 3))
r = radius * np.sqrt(u)
theta = np.random.uniform(0, 2 * np.pi, (num_samples, 3))
x = r * np.cos(theta)
y = r * np.sin(theta)
x1, x2, x3 = x[:, 0], x[:, 1], x[:, 2]
y1, y2, y3 = y[:, 0], y[:, 1], y[:, 2]
areas = 0.5 * np.abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2))
simulated_mean = np.mean(areas)
theoretical_mean = (35 / (48 * np.pi)) * (radius ** 2)
return areas, simulated_mean, theoretical_mean
areas, sim, theo = calculate_expected_area(radius=1.0, num_samples=200_000)
print(f"Simulated mean: {sim:.6f}")
print(f"Theoretical mean: {theo:.6f}")
plt.figure(figsize=(6, 4))
plt.hist(areas, bins=60, density=True, color="#60a5fa", alpha=0.8)
plt.axvline(theo, color="#ef4444", linewidth=2, label="Theoretical mean")
plt.title("Triangle area distribution (unit disk)")
plt.xlabel("Area")
plt.ylabel("Density")
plt.legend()
plt.tight_layout()
plt.savefig("static/images/expected-triangle-area-plot.svg")
plt.show()