2.5

Construct an equilateral triangle inscribed inside the circle.

init({ range: [[-5, 5], [-4, 4]], scale: 50 }); addMouseLayer(); addConstruction("construction"); addDummyCircle([0, 0], SIZE); addDummyPoint([0, 0]);
getToolProperties(construction)
if (guess.length === 0) { return ""; } var lines = findInscribedPolygon(guess, [0, 0], SIZE, 3); if (lines === false) { return false; } // A point on the inscribed shape var p1 = lines[0].first.coord; // Check there is a compass with radius equal to the circle's radius // and centered on the circle and a circle's radius or a circle's // diameter from a point on the triangle var compasses = findCompass(guess, {radius: SIZE}); for (var i = 0; i < compasses.length; i++) { var x = compasses[i].center.coord[0]; var y = compasses[i].center.coord[1]; if (distEqual([0, 0], [x, y], SIZE) && (distEqual(p1, [x, y], SIZE) || distEqual(p1, [x, y], 2 * SIZE))) { return true; } } return "Make sure you keep the compasses you used in place."
showConstructionGuess(guess);
graph.dx = SIZE * cos(PI / 6); graph.dy = SIZE * sin(PI / 6); graph.hintLines = raphael.set(); graph.hintLines.push(drawHintLine([0, SIZE], [graph.dx, -graph.dy], 1)); graph.hintLines.push(drawHintLine([0, SIZE], [-graph.dx, -graph.dy], 1)); graph.hintLines.push(drawHintLine([-graph.dx, -graph.dy], [graph.dx, -graph.dy], 1));

We could just try to draw a triangle inside the circle, but then we have no guarantee that all the sides would be the same length and all the angles would be the same size.

graph.hintLines.push(drawHintLine([0, 0], [0, SIZE], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [-graph.dx, -graph.dy], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [graph.dx, -graph.dy], 2)).toBack(); graph.hintLines.push(arc([0, 0], 0.3, 210, 330, 0, { stroke: BLUE, strokeWidth: 1 }));

The points of an equilateral triangle are equally spaced around the center. Therefore, each point is 120^{\circ} from each other point.

graph.hintLines.remove(); line([0, SIZE], [0, -SIZE], { strokeWidth: 2, stroke: GRAY }).toBack(); circle([0, SIZE], 0.08, { fill: GRAY, stroke: null }) circle([0, -SIZE], 0.08, { fill: GRAY, stroke: null }) circle([0, -SIZE], SIZE, { stroke: GRAY, strokeWidth: 1, fill: "none", strokeDasharray: "- " }).toBack();

Draw a line through the center of the circle and center a compass with the same radius as the original circle at one point.

graph.hintLines = raphael.set(); graph.hintLines.push(drawHintLine([0, 0], [0, -SIZE], 3)); graph.hintLines.push(drawHintLine([0, 0], [graph.dx, -graph.dy], 3)); graph.hintLines.push(drawHintLine([0, -SIZE], [graph.dx, -graph.dy], 3)); graph.hintLines.push(arc([0, 0], 0.3, -90, -30, 0, { stroke: BLUE, strokeWidth: 1 }));

The distance between the centers of the two compasses is equal to the radius of each compass. The distance between the center of a compass and every point on the compass circumference is also equal to the compass radius. Therefore the points where the two compasses intersect is one radius from the center of each compass.

Joining one point where the compasses intersect with the centers of the two compasses forms an equilateral triangle. The interior angles of an equilateral triangle are 60^{\circ}.

graph.hintLines.remove(); line([0, SIZE], [graph.dx, -graph.dy], { strokeWidth: 2, stroke: GRAY }).toBack(); line([0, SIZE], [-graph.dx, -graph.dy], { strokeWidth: 2, stroke: GRAY }).toBack(); line([graph.dx, -graph.dy], [-graph.dx, -graph.dy], { strokeWidth: 2, stroke: GRAY }).toBack(); circle([graph.dx, -graph.dy], 0.08, { fill: GRAY, stroke: null }) circle([-graph.dx, -graph.dy], 0.08, { fill: GRAY, stroke: null })

Therefore, the two points where the compasses intersect are 120^{\circ} apart, and 120^{\circ} from the opposite end of the diameter. Joining these points therefore forms an equilateral triangle.

Construct a square inscribed inside the circle.

init({ range: [[-5, 5], [-4, 4]], scale: 50 }); addMouseLayer(); addConstruction("construction"); addDummyCircle([0, 0], SIZE); addDummyPoint([0, 0]);
getToolProperties(construction)
if (guess.length === 0) { return ""; } var lines = findInscribedPolygon(guess, [0, 0], SIZE, 4); if (lines === false) { return false; } // Check there is at least two compasses on the circle var compasses = _.filter(guess, function(tool) { if (tool.center) { var x = tool.center.coord[0]; var y = tool.center.coord[1]; return distEqual([0, 0], [x, y], SIZE); } }); if (compasses.length < 1) { return "Make sure you keep the compasses you used in place."; } // Check there is at least one line going through the center of the circle var constructLines = _.filter(guess, function(tool) { return tool.first && isPointOnLineSegment([tool.first.coord, tool.second.coord], [0, 0], 0.1); }) if (constructLines.length === 0) { return "Make sure you keep the straightedges you used in place." } else { return true; }
showConstructionGuess(guess);
graph.hintLines = raphael.set(); graph.hintLines.push(drawHintLine([0, SIZE], [SIZE, 0], 1)); graph.hintLines.push(drawHintLine([0, SIZE], [-SIZE, 0], 1)); graph.hintLines.push(drawHintLine([0, -SIZE], [SIZE, 0], 1)); graph.hintLines.push(drawHintLine([0, -SIZE], [-SIZE, 0], 1));

We could just try to draw a square inside the circle, but then we have no guarantee that all the sides would be the same length and all the angles would be right angles.

line([0, SIZE], [0, -SIZE], { strokeWidth: 2, stroke: GRAY }).toBack(); graph.hintLines.push(line([SIZE, 0], [-SIZE, 0], { strokeWidth: 2, stroke: GRAY })).toBack(); style({ strokeWidth: 1, stroke: GRAY }, function() { graph.hintLines.push(line([-0.25, 0.25], [0.25, 0.25])); graph.hintLines.push(line([0.25, 0.25], [0.25, -0.25])); graph.hintLines.push(line([0.25, -0.25], [-0.25, -0.25])); graph.hintLines.push(line([-0.25, -0.25], [-0.25, 0.25])); });

The diagonals of an inscribed square will have a length equal to the diameter of the circle and will intersect one another at right angles.

The diagonals must therefore be perpendicular bisectors of one another.

graph.hintLines.remove(); graph.r2 = SIZE + 1.5; circle([0, SIZE], 0.08, { fill: GRAY, stroke: null }); circle([0, SIZE], graph.r2, { stroke: GRAY, strokeWidth: 1, fill: "none", strokeDasharray: "- " }).toBack(); var compassPoint2 = circle([0, SIZE], 0.08, { fill: GRAY, stroke: null }); var compass2 = circle([0, SIZE], graph.r2, { stroke: GRAY, strokeWidth: 1, fill: "none", strokeDasharray: "- " }).toBack(); compassPoint2.animate({ cx: scalePoint([0, -SIZE])[0], cy: scalePoint([0, -SIZE])[1] }, 1000); compass2.animate({ cx: scalePoint([0, -SIZE])[0], cy: scalePoint([0, -SIZE])[1] }, 1000);

If we use a compass to draw a circle of the same radius at each end of the diagonal, the points where the circles intersect will be equidistant from each end.

var x = pow(graph.r2 * graph.r2 - SIZE * SIZE, 0.5); line([-x, 0], [x, 0], { strokeWidth: 2, stroke: GRAY }).toBack(); circle([-x, 0], 0.08, { fill: GRAY, stroke: null }); circle([x, 0], 0.08, { fill: GRAY, stroke: null }); style({ strokeWidth: 1, stroke: GRAY }, function() { line([-0.25, 0.25], [0.25, 0.25]); line([0.25, 0.25], [0.25, -0.25]); line([0.25, -0.25], [-0.25, -0.25]); line([-0.25, -0.25], [-0.25, 0.25]); });

Connecting the points where the circles intersect creates a perpendicular bisector of the first line.

style({ strokeWidth: 2, stroke: GRAY }, function() { line([0, SIZE], [SIZE, 0]); line([SIZE, 0], [0, -SIZE]); line([0, -SIZE], [-SIZE, 0]); line([-SIZE, 0], [0, SIZE]); }); style({ fill: GRAY, stroke: null, }, function() { circle([0, SIZE], 0.08); circle([0, -SIZE], 0.08); circle([SIZE, 0], 0.08); circle([-SIZE, 0], 0.08); });

We now have two perpendicular lines centered on the center of the circle. Connecting the points where the diagonals meet the circle creates a square.

Construct a regular hexagon inscribed inside the circle.

init({ range: [[-5, 5], [-4, 4]], scale: 50 }); addMouseLayer(); addConstruction("construction"); addDummyCircle([0, 0], SIZE); addDummyPoint([0, 0]);
getToolProperties(construction)
if (guess.length === 0) { return ""; } var lines = findInscribedPolygon(guess, [0, 0], SIZE, 6); if (lines === false) { return false; } // A point on the inscribed shape var p1 = lines[0].first.coord; // Check there is a compass with radius equal to the circle's radius, r, // and centered on the circle. It should be either r, 2r or 2*root(3) r // from each point on the hexagon var compasses = findCompass(guess, {radius: SIZE}); for (var i = 0; i < compasses.length; i++) { var x = compasses[i].center.coord[0]; var y = compasses[i].center.coord[1]; if (distEqual([0, 0], [x, y], SIZE) && (distEqual(p1, [x, y], SIZE) || distEqual(p1, [x, y], 2 * SIZE) || distEqual(p1, [x, y], 1.732 * SIZE))) { return true; } } return "Make sure you keep the compasses you used in place."
showConstructionGuess(guess);
graph.dx = SIZE * cos(PI / 6); graph.dy = SIZE * sin(PI / 6); graph.hintLines = raphael.set(); graph.hintLines.push(drawHintLine([0, SIZE], [graph.dx, graph.dy], 1)); graph.hintLines.push(drawHintLine([0, SIZE], [-graph.dx, graph.dy], 1)); graph.hintLines.push(drawHintLine([graph.dx, -graph.dy], [graph.dx, graph.dy], 1)); graph.hintLines.push(drawHintLine([-graph.dx, -graph.dy], [-graph.dx, graph.dy], 1)); graph.hintLines.push(drawHintLine([0, -SIZE], [graph.dx, -graph.dy], 1)); graph.hintLines.push(drawHintLine([0, -SIZE], [-graph.dx, -graph.dy], 1));

We could just try to draw a regular hexgon inside the circle, but then we have no guarantee that all the sides would be the same length and all the angles would be the same size.

graph.hintLines.push(drawHintLine([0, 0], [graph.dx, graph.dy], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [graph.dx, -graph.dy], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [-graph.dx, graph.dy], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [-graph.dx, -graph.dy], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [0, SIZE], 2)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [0, -SIZE], 2)).toBack(); graph.hintLines.push(arc([0, 0], 0.3, 270, 330, 0, { stroke: BLUE, strokeWidth: 1 }));

The points of a regular triangle are equally spaced around the center. Therefore, each point is 60^{\circ} from each other point.

graph.hintLines.remove(); line([0, SIZE], [0, -SIZE], { strokeWidth: 2, stroke: GRAY }).toBack(); circle([0, SIZE], 0.08, { fill: GRAY, stroke: null }) circle([0, -SIZE], 0.08, { fill: GRAY, stroke: null }) circle([0, SIZE], SIZE, { stroke: GRAY, strokeWidth: 1, fill: "none", strokeDasharray: "- " }).toBack(); circle([0, -SIZE], SIZE, { stroke: GRAY, strokeWidth: 1, fill: "none", strokeDasharray: "- " }).toBack();

Draw a line through the center of the circle and center a compass with the same radius as the original circle at both end points.

graph.hintLines = raphael.set(); graph.hintLines.push(drawHintLine([0, 0], [0, -SIZE], 3)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [graph.dx, -graph.dy], 3)).toBack(); graph.hintLines.push(drawHintLine([0, -SIZE], [graph.dx, -graph.dy], 3)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [0, SIZE], 3)).toBack(); graph.hintLines.push(drawHintLine([0, 0], [graph.dx, graph.dy], 3)).toBack(); graph.hintLines.push(drawHintLine([0, SIZE], [graph.dx, graph.dy], 3)).toBack(); graph.hintLines.push(arc([0, 0], 0.3, -90, -30, 0, { stroke: BLUE, strokeWidth: 1 })); graph.hintLines.push(arc([0, 0], 0.3, 30, 90, 0, { stroke: BLUE, strokeWidth: 1 }));

Joining one point where two compasses intersect with the centers of those two compasses forms an equilateral triangle. The interior angles of an equilateral triangle are 60^{\circ}.

graph.hintLines.remove(); style({ strokeWidth: 2, stroke: GRAY }, function() { line([0, SIZE], [graph.dx, graph.dy]); line([0, SIZE], [-graph.dx, graph.dy]); line([0, -SIZE], [graph.dx, -graph.dy]); line([0, -SIZE], [-graph.dx, -graph.dy]); line([graph.dx, graph.dy], [graph.dx, -graph.dy]); line([-graph.dx, graph.dy], [-graph.dx, -graph.dy]); }); circle([graph.dx, -graph.dy], 0.08, { fill: GRAY, stroke: null }) circle([-graph.dx, -graph.dy], 0.08, { fill: GRAY, stroke: null })

Therefore, by joining the points where the compasses intersect with the original line we can construct a regular hexagon.