circle-ml nodejavascript.com

It has never been told what a circle is.

One rule decides every dot on this page. A coordinate is inside if it is no further from the centre than the radius, and the radius is half the side of the square โ€” so the circle's diameter is the side of the square and the circle touches all four edges. Nobody draws that circle here. The learner is shown two numbers, says inside or outside, and is told whether it was right.

What appears on the stage is its own conclusion: a boundary computed from 97 numbers, which starts as a wobble and arrives at the shape of the rule. It was never given the distance from the centre, and it has never seen a picture of the answer.

three.js for the stage ยท one hidden layer and 97 numbers, in plain TypeScript with no library for the learning ยท trained in your own tab and gone when you close it ยท no server, no account, no keys, nothing uploaded.

Watch it guess

Reading

Coordinates asked0
Right0
Wrong0
Right overallโ€”
Right in the last 100โ€”
Confidenceโ€”
Numbers in the network97
Belief pictureโ€”
Boundary segments0
Dots on the stage0

Blue is a right guess and red is a wrong one, and each dot is coloured by the answer the network gave before it was told anything. The green wash is where it currently believes the inside is; the bright line is where that belief crosses a half. That line is computed from the network's own numbers โ€” nothing here drew a circle for it to copy โ€” which is why it is a wobble at the start and the rule's shape later. The square is drawn because the rule is about a square; the circle is not, because finding it is the whole job.

It is not allowed to settle for nearly right. Every coordinate it gets wrong is kept, and the next steps push back on those hardest, so the effort goes where its boundary is still in the wrong place. The run is working towards the only answer that counts as finished here: a hundred out of the last hundred. Confidence is a different number and it is the one on the left of it โ€” how sure the network is of itself, on average, where a half is a coin. It climbs towards a hundred and stops a little under it, because a coordinate sitting exactly on the boundary is one it is right to be unsure about. Being certain is not the same as being right, and only the second one is the target.

What it can see, and what it is

Both lists are printed, because "it learned" means very little unless you can say what it was allowed to look at and what it was made of.

The honest bits

Ten things this project found by measuring rather than by assuming. Every number here comes out of the run described in the repository, on five seeds, and every one of them is a number that disagreed with a belief first.

Right answers against coordinates asked

Out of the last hundred guesses, how many were right, against how many coordinates the network has been asked about. The rolling hundred rather than the running total, because a running total is dominated by whatever happened at the start and flatly refuses to move afterwards. The dashed line is the free score โ€” 78.54%, which is what answering "inside" to everything gets. Everything below that line is a learner doing worse than a machine that knows nothing, which is exactly where it begins.

Questions this page gets asked

Where is the circle?

Not on the stage. There is no circle geometry anywhere in the scene and no circle drawn in the page's own code either. The circle exists as one comparison โ€” x squared plus y squared, no greater than r squared โ€” and that comparison only ever decides whether a dot was right. Everything round on the stage is the network's own conclusion.

Is it memorising the coordinates?

No. Every accuracy figure on this page is measured on coordinates the network has never been shown, and ninety-seven numbers cannot hold a square full of coordinates. The page hands its own measurements over rather than asking you to take its word: the object called __circle is on the console, and its status() prints a score measured on four thousand coordinates it has never seen.

Why do the red dots sit where they sit?

Because that is where the job is hard. A red dot is a coordinate where the belief was on the wrong side of a half, and the belief is close to a half only near the boundary โ€” so the wrong answers collect in a ring. Measured against the true radius over a hundred and eighty directions, the learned boundary's mean error is 0.016.

Does anything I do here leave my browser?

No. The network, the training and the stage all run in this tab, and they are gone when it closes. The site sets no cookie of its own, and it asks Google for nothing at all unless you say yes to being counted.

Privacy

There is no account here, nothing to sign into, and nothing that is uploaded. The network is created, trained and thrown away inside this tab. Close it and nothing of it is left anywhere โ€” not on this site's servers, because there are none doing any work, and not in this browser either.

What is stored. One value in this browser's local storage, recording whether you agreed to be counted. No cookie of the site's own is set, and nothing you do is sent anywhere.

Analytics. The page does not carry Google's tag. The script that could load it is in the page with an empty measurement identifier, and it asks Google for nothing at all until you say yes. Refusing makes no request to Google, and the question is not asked again.

Your answer is changeable. The footer carries a door back into the same panel.

Where the data is. On your device, and nowhere else. The one thing a page usually fetches from somebody else is its typeface, and this one does not: the stylesheet uses the fonts your machine already has, so a visit that refuses makes no third-party request whatsoever.

When the page breaks. One thing is sent without being asked about, and this is it. If the page fails on your machine โ€” a browser that will not start the drawing stage, an error nobody caught โ€” a short note describing the fault goes to this site's own address, which passes it to the fault-tracking service Rollbar, where it is kept for a short period. It is not a cookie and it stores nothing in your browser; it carries no identifier, no account, no address and no search term, and the page path is sent without its query string. It is the only thing here that runs before you answer the question, because a breakage nobody hears about is a breakage nobody can fix. Reject all stops the counting and does not stop this.

Last changed: 4 October 2026.