Thursday, January 22, 2026

Spherical

  Got curious about the mathematics needed to calculate the area of a patch on a sphere.

Below, with Copilot:                                                                                  



A compact formula, but it carries a lot of geometric intuition: every sphere’s surface area scales with the square of its radius, just like a circle’s area does, but multiplied by 

4𝜋

 because the sphere “wraps” that curvature in all directions.

If you want, we can also explore where this formula comes from—there’s a beautiful derivation using calculus and even one using Archimedes’ geometric argument.


How can I determine if 3 points are on the same sphere?

You can test whether three points lie on the same sphere, but with an important geometric caveat:



🟦 Key fact

Any three non‑collinear points always lie on infinitely many spheres.  

A unique sphere is determined only when you have four non‑coplanar points.


So the real question becomes:

If the three points are collinear, they lie on no sphere (except one with infinite radius, i.e., a line).

If the three points are not collinear, they lie on infinitely many spheres, all having those three points on their surface.

But if what you want is a test—a way to check whether three points could lie on a sphere—here’s the clean mathematical condition.

If the cross product is zero, the points are collinear → they do not lie on any finite sphere.

🟩 Why three non‑collinear points always lie on a sphere

Three points define a unique circle in 3D.

Every circle can be the “equator” of infinitely many spheres—imagine sliding the sphere’s center along the line perpendicular to the circle’s plane.

🟧 If what you really want* is the sphere that passes through 3 points…

Then you need one more constraint, such as:

the sphere’s center lies on a given line

the sphere’s center lies on a given plane

the sphere has a known radius

the sphere must be tangent to something

or you have a fourth point

Tell me the exact scenario you’re working with, and I’ll help you derive the sphere or test the condition you actually need.


I have a spherical beach ball, and I want a patch for it. What should my three (x,y,z) points look like?

                                                                              


                                                                                       


If you tell me the ball’s radius (or how you’re measuring positions on it—like from a valve or seam), we can pick points that match a real‑world layout you could actually mark on the ball.

                                                                      *     *     *

Had a long Chat about the conditions on the points. In essence, the three components on a point

have to create a radius 4 point so that it ends up on the surface of the sphere. And every vertice must

begin or end with one other.


Give my sphere a radius of 4, and create three points for me...


                                                                                 




If you want a patch of a particular shape—equilateral, isosceles, long and thin, or centered around a specific direction—we can generate a custom triple too.

                                                                      *     *     *

Had a chat with Meta:

How do I know if my vertices will meet?

🤔 You're wondering if your three vertices will form a valid spherical triangle on your beach ball? 😊

For three vertices to meet and form a spherical triangle, they must:

Lie on the sphere's surface: Each vertex's coordinates must satisfy the sphere's equation (x^2 + y^2 + z^2 = r^2).

Not be collinear: The vertices shouldn't lie on the same great circle (or be too close to it).

If you're defining vertices on a sphere, ensure they're distinct points on the surface and not in a straight line.

Want to check if specific vertices meet these conditions? 😊


Is there anything to notice about the three coordinates of each?

🤔 You're thinking about the coordinates of the vertices on the sphere? 😊

If the three points are on the same sphere, there's no simple condition that applies to the individual coordinates (x, y, z) alone. However, the points must satisfy the sphere's equation:

(x1^2 + y1^2 + z1^2 = r^2), (x2^2 + y2^2 + z2^2 = r^2), (x3^2 + y3^2 + z3^2 = r^2)

One thing to notice is that if you calculate the dot product of vectors from the origin to each point, you'll get:

p1 · p2 = x1x2 + y1y2 + z1*z2 = r^2 * cos(θ12)

where θ12 is the angle between p1 and p2 at the center of the sphere.

Want to explore how this relates to your spherical triangle or beach ball patch? 🌊

                                                           *     *     *

Asked Perplexity AI for code to generate three random patches:

import numpy as np

# --- geometry helpers -------------------------------------------------

def random_unit_vectors(n):
"""n random unit vectors uniformly on the unit sphere."""
v = np.random.normal(size=(n, 3))
v /= np.linalg.norm(v, axis=1, keepdims=True)
return v # shape (n,3) [web:1][web:4]

def spherical_triangle_area(a, b, c, radius=1.0):
"""
Area of spherical triangle with vertices a,b,c on sphere of given radius.
a,b,c must be unit vectors; formula gives area on unit sphere, then scale. [web:5]
"""
# Folke Eriksson / John D. Cook formula on unit sphere. [web:5]
t = abs(np.dot(a, np.cross(b, c)))
denom = 1.0 + np.dot(a, b) + np.dot(b, c) + np.dot(a, c)
E = 2.0 * np.arctan2(t, denom) # spherical excess, equals area on unit sphere. [web:5]
return E * radius**2 # scale for sphere of radius R.

def sphere_surface_area(radius):
return 4.0 * np.pi * radius**2


# --- main generator ---------------------------------------------------

def random_spherical_patches(radius=4.0, n_patches=3,
max_fraction=0.25,
max_tries_per_patch=10_000):
"""
Generate up to n_patches random spherical triangles (as 3D vertices),
each with area < max_fraction * (surface area of the sphere).

Returns:
patches: list of (3,3) arrays, each row a vertex (x,y,z) on the sphere.
areas: list of areas of each spherical triangle.
"""
target_area = max_fraction * sphere_surface_area(radius)

patches = []
areas = []

for _ in range(n_patches):
for _ in range(max_tries_per_patch):
# random unit vectors for vertices
a_u, b_u, c_u = random_unit_vectors(3)

# area on sphere of given radius
area = spherical_triangle_area(a_u, b_u, c_u, radius=radius)

if area < target_area:
# scale to radius
tri = np.stack([a_u, b_u, c_u], axis=0) * radius
patches.append(tri)
areas.append(area)
break
else:
# could not find a suitable patch in allotted tries
# you may choose to raise instead
print("Warning: failed to find patch under area limit.")
break

return patches, areas


# --- example usage ----------------------------------------------------

if __name__ == "__main__":
radius = 4.0
n_patches = 3 # or 2, etc.
patches, areas = random_spherical_patches(radius=radius, n_patches=n_patches)

for i, (tri, area) in enumerate(zip(patches, areas), start=1):
print(f"Patch {i}:")
print("Vertices (x,y,z):")
print(tri)
print(f"Area: {area:.5f}")
print()

No comments: