The Dynamic Geometry Board, Explained

After reading this you will know how a construction board keeps a midpoint at the midpoint while you drag, why the relation checker can tell a theorem from a lucky picture, and how to read the results without fooling yourself.

What a dynamic geometry board is

A dynamic geometry board stores a construction, not a picture. You place a few free points. Everything else is defined by a rule: a line through two points, the midpoint of a segment, the circle through three points, the reflection of a point across a line. When you drag a free point, the board re-solves every dependent object from its rule. The picture changes; the relationships do not.

Here is the hook. Draw a triangle ABC. Construct the three perpendicular bisectors of its sides. They meet at one point, the circumcenter. Now grab vertex A and drag it anywhere. The three bisectors move, but they still meet at a single point. That single meeting is not something you drew. It is a theorem, and the board lets you feel it in your hand.

Contrast that with a drawing program, where you would place three lines that happen to cross near one spot. Move a vertex and they scatter. The difference is the dependency graph: a dynamic board knows that the circumcenter depends on A, B and C, and recomputes it every frame.

When to use it, and when not

Reach for the board when you want to test a claim about points, lines, circles and their transformations, and when that claim should hold for a whole family of configurations rather than one. Questions like "are these three points always collinear" or "do these three circles always share a point" are exactly its job.

Do not use it to prove a theorem in the formal sense. The checker gives numerical evidence at tolerance 10^-7, tested under forty random legal moves. That is strong enough to trust a conjecture, but it is not a proof. A relation that fails on one of the forty moves is refuted; a relation that passes all forty is very probably true and still needs a written argument.

The board is also the wrong instrument for continuous dynamics. If you want trajectories, chaos or diffusion, look elsewhere: the Lorenz attractor and the three-body choreographies are built for that. The board is about exact incidence, not flow.

The dependency graph and how objects are re-solved

Think of the construction as a directed graph. Free points are sources with two real coordinates each. Every other object is a node whose value is a function of its parents. Dragging changes a source; the board recomputes nodes in topological order.

Most rules are short formulas. The midpoint of A and B is

M = \left( \frac{x_A + x_B}{2},\ \frac{y_A + y_B}{2} \right)

Here x_A and y_A are the coordinates of A, and likewise for B. The midpoint has no freedom of its own; it is fully pinned by its two parents.

Intersections are the interesting case because they can have several solutions. A line and a circle meet in two points, one point (tangent) or none. The board fixes a branch: the two crossings are ordered along the line, so the "first" one stays first as you drag. When the branch vanishes at a tangency, that intersection becomes undefined rather than jumping to the other branch. This is why a construction does not flip inside out when you drag through a tangent position.

Blue points are free; you can drag them. Black points are constructed and follow their parents. Clicking a line or circle attaches a new point that is free to slide along it but not off it. Clicking a crossing makes an intersection point with a fixed branch.

How the relation checker separates theorems from coincidences

Select a few objects and ask a question. Collinearity of three points, concurrency of three lines, equal lengths, concyclicity of four points: each becomes a number that should be zero when the relation holds.

Take three points collinear. They lie on one line exactly when the signed area of the triangle they form is zero:

2\,[\,PQR\,] = (x_Q - x_P)(y_R - y_P) - (x_R - x_P)(y_Q - y_P)

The bracket [\,PQR\,] is the triangle area. If this determinant is 0, the three points are collinear. The checker computes it in your current drawing, then re-solves the whole construction for forty fresh random positions of every free point and computes it again each time. If the value stays within 10^-7 of zero across all forty, the relation is reported as a theorem. If it is small in your drawing but large under a random move, it was a coincidence of where you happened to place the points.

Forty independent moves is what turns a suggestive picture into evidence. A false relation that happened to hold in your one drawing has essentially no chance of surviving forty random reconfigurations at seven-digit precision.

A worked example: the Euler line

Three centers on one line

Load the Euler line construction from the built-in examples. It starts from a triangle with vertices near A = (0, 0), B = (6, 0) and C = (1, 4). Three special points are built on it.

  1. The centroid G is the average of the vertices: G = ((0+6+1)/3, (0+0+4)/3) = (2.333, 1.333).
  2. The circumcenter O is where the perpendicular bisectors meet. Solving gives O = (3, 1.375). Check: distance to A is \sqrt{3^2 + 1.375^2} = 3.300, and to C is \sqrt{2^2 + 2.625^2} = 3.300. Equal, as a circumcenter must be.
  3. The orthocenter H is where the altitudes meet: H = (1, 1.25).
  4. Test collinearity of O, G, H. Compute the determinant with P = O, Q = G, R = H: (2.333 - 3)(1.25 - 1.375) - (1 - 3)(1.333 - 1.375) = (-0.667)(-0.125) - (-2)(-0.042) = 0.0834 - 0.0840 = -0.0006.

That value is not zero, so a first glance might say the points are not collinear. The residual comes from rounding the centers to three decimals. Carry full precision and the determinant collapses to about 1.5 \times 10^{-15}, which the checker reads as zero. Euler proved in 1765 that O, G and H are always collinear, and that G divides the segment so that HG = 2\,GO. Check the ratio: HG = sqrt((1 - 2.333)^2 + (1.25 - 1.333)^2) = 1.336 and GO = sqrt((2.333 - 3)^2 + (1.333 - 1.375)^2) = 0.668, and 1.336 / 0.668 = 2.000.

With vertices A(0,0), B(6,0), C(1,4) the circumcenter is O(3, 1.375), the centroid is G(2.333, 1.333) and the orthocenter is H(1, 1.25). All three lie on one line, and the distance HG is exactly twice GO. Drag any vertex and the three points move but stay on that line.

Reading and interpreting the results

The checker returns one of three verdicts. Holds under all moves means the residual stayed below 10^-7 for your drawing and all forty random configurations: treat this as a theorem worth proving. Fails means at least one configuration broke the relation: your conjecture is false, and the failing move is a counterexample. Undefined can appear when a random move sends an intersection off to a tangency or a parallel case; the relation is simply not testable there, and the checker skips that move.

Watch the magnitude, not just the yes or no. A residual that hovers at 3 \times 10^{-6} across the forty moves, never quite reaching 10^-7, usually means an approximate relation rather than an exact one. Napoleon's theorem, for example, gives an equilateral triangle whose side residual should sit near machine zero, around 10^-14, not merely small.

Formulas in the board read objects by name. An angle \alpha returns degrees, a segment returns its length, a circle returns its radius, a polygon returns its area, and x(A), y(A) and dist(A,B) read points. Trigonometric functions take degrees, so sin(30) is 0.5, not the radian value.

Common mistakes

Do not read a single frozen picture as proof. Three lines crossing near one pixel might be concurrent or might just be close. Always let the checker move the free points. A relation that survives forty random moves is trustworthy; one that only looks right in your drawing is not.

A second trap is building on an intersection that is about to vanish. If you attach later construction to the second crossing of a line and a circle, and you then drag through the tangent, that crossing becomes undefined and everything downstream disappears until it returns. This is correct behavior, not a bug, but it surprises people. Keep constructions on branches that stay defined across the range you plan to drag.

A third mistake is confusing a free point on a line with a free point in the plane. A point attached to a line has one degree of freedom, not two; it slides but cannot leave the line. The checker respects that when it generates random moves, which is why "legal moves" in the footnotes matters: it only moves each free object within the freedom it actually has.

Finally, mind units in formulas. Because trigonometric functions take degrees, writing cos(1) gives 0.9998, the cosine of one degree, not of one radian. If you expected the radian value 0.5403, convert explicitly.

Related tools

If you enjoyed watching a locus draw itself, the spirograph traces the same kind of curve from rolling circles, and the Bézier curve playground shows De Casteljau's construction step by step. For the algebra behind rigid motions, the linear transformation playground shows what a 2x2 matrix does to the plane, which is exactly what the board's rotations and dilations compute. To see incidence structure of a different kind, the Voronoi and Lloyd relaxation tool partitions the plane by nearest point. And for the classic solids where you can check Euler's formula V - E + F = 2, try the Platonic solids explorer.

Frequently asked questions

Does the relation checker prove a theorem?

No. It gives numerical evidence: it re-solves the construction for forty random legal positions and compares to 10^-7. Passing all forty is overwhelming evidence that the relation is exact, but a formal proof still needs a written argument. Think of the checker as a very reliable filter that tells a theorem from a coincidence.

Why did part of my construction disappear when I dragged?

You probably built on an intersection that ceased to exist. A line and a circle meet in two points, one point or none, and the board keeps a fixed branch. When you drag through a tangency the branch vanishes and everything depending on it becomes undefined until the branch returns. Rebuild on a branch that stays defined over the range you drag.

Why does a midpoint stay at the midpoint but a random-looking point does not?

The midpoint is a constructed (black) point defined by its parents, so the board recomputes it from the rule every frame. A free (blue) point has its own coordinates and moves only when you drag it. Only constructed objects follow the construction.

Do trigonometric functions in formulas use degrees or radians?

Degrees. sin(30) returns 0.5 and cos(1) returns 0.9998. An angle object like \alpha also reports degrees. Convert by hand if you need radians.

How precise is the equality test, really?

The tolerance is 10^-7. Exact relations usually come back far tighter, near 10^-14, close to double-precision machine zero. A residual that sits stubbornly around 10^-6 across the forty moves is a hint that the relation is only approximate, not a true identity.