Library · Geometric Probability · Chapter 46

Sylvester’s four-point problem in a disc

Revised Report an error

Problem 46.1

Let P1,P2,P3,P4P_1, P_2, P_3, P_4 be four points chosen independently and uniformly at random in a disc of radius rr. What is the probability that they form the vertices of a convex quadrilateral?

Solution. By the same dichotomy as in Chapters 43 and 45, P(convex)=1−4⋅E[Area⁡(△P1P2P3)]πr2.\mathbb{P}(\text{convex}) = 1 - 4 \cdot \frac{\mathbb{E}[\operatorname{Area}(\triangle P_1 P_2 P_3)]}{\pi r^2}.

The expected triangle area for three uniform random points in a disc of radius rr is the classical constant E[Area⁡(△P1P2P3)]=3548π⋅r2.\mathbb{E}[\operatorname{Area}(\triangle P_1 P_2 P_3)] = \frac{35}{48 \pi} \cdot r^2. This is due to Woolhouse (1867) and can be derived by polar-coordinate integration: conditioning on the distances of two of the three points from the origin, one reduces the calculation to a one-dimensional integral that eventually yields the expected area 3548π r2\tfrac{35}{48\pi}\,r^2. As a fraction of the disc’s own area πr2\pi r^2, this is 3548π2≈0.0739\tfrac{35}{48\pi^2} \approx 0.0739 (not 3548π\tfrac{35}{48\pi}, which is the area itself when r=1r = 1). (The computation is longer than those for the triangle and square cases, but entirely elementary.)

Substituting, P(convex)=1−4⋅(35/(48π))⋅r2πr2=1−3512π2.\mathbb{P}(\text{convex}) = 1 - 4 \cdot \frac{(35/(48\pi)) \cdot r^2}{\pi r^2} = 1 - \frac{35}{12 \pi^2}. Hence P(convex)=1−3512π2≈0.7045.■\boxed{\mathbb{P}(\text{convex}) = 1 - \frac{35}{12\pi^2} \approx 0.7045.} \qedhere

Compared with the triangle (23\tfrac23) and the square (2536\tfrac{25}{36}), the disc gives the largest convex-position probability among the three. Blaschke’s 1917 theorem says that among all convex regions of area 11, the triangle minimises this probability and the ellipse (or disc) maximises it. The extremal values 23\tfrac23 and 1−3512π21 - \tfrac{35}{12\pi^2} frame the entire range of Sylvester’s four-point problem over convex shapes.

import numpy as np
N = 10**6
# Uniform in unit disc via (sqrt(u), angle)
r = np.sqrt(np.random.rand(4, N))
t = np.random.rand(4, N) * 2*np.pi
u, v = r*np.cos(t), r*np.sin(t)
def inside_tri(pu, pv, au, av, bu, bv, cu, cv):
    det = (bv-cv)*(au-cu) + (cu-bu)*(av-cv)
    w1 = ((bv-cv)*(pu-cu) + (cu-bu)*(pv-cv)) / det
    w2 = ((cv-av)*(pu-cu) + (au-cu)*(pv-cv)) / det
    return (w1 > 0) & (w2 > 0) & (1 - w1 - w2 > 0)
any_in = np.zeros(N, dtype=bool)
for i in range(4):
    j, k, l = [m for m in range(4) if m != i]
    any_in |= inside_tri(u[i], v[i], u[j], v[j], u[k], v[k], u[l], v[l])
print(f"sim: {(1 - any_in).mean():.5f}   exact: {1 - 35/(12*np.pi**2):.5f}")
# sim: 0.70427   exact: 0.70448
Report an error on this page

Reports are stored by Netlify. See the privacy note.