FluxGeo User Guide

Community documentation for FluxGeo v1.3-beta — covering constructions, macros, CLI, plotting, generated geometry, discovery, and narrative projects.

Recommended reading order

  1. Triangle Constructions Guide
  2. Macro / User-defined Tools Guide
  3. CLI User Guide
  4. Object Properties Guide
  5. GUI Docking and Workspace Guide
  6. Generated Geometry + Unit Graph Tutorial
  7. Sequence Generator Tutorial
  8. Function Plotting Guide
  9. Discovery and Prover Guide
  10. Narrative Project and Project Navigator Guide
  11. Example Gallery Guide
  12. CLI Batch Examples
  13. FluxGeo Plotting Examples
  14. Tangential Circle Tools Guide
  15. Tool Reference

1. Triangle Constructions Guide

This guide covers triangle center, line, circle, and derived shape constructions.

If you find a bug in v1.3-beta, please report it with:

1. Choosing triangle inputs

Triangle constructions accept three point-like objects in order, or a single Triangle object, or a compatible 3-vertex Polygon.

The three points define the triangle vertex order:

This ordering matters for excenters and excircles, which are named relative to their opposite vertex.

2. Triangle Centers

2.1 Basic centers

Menu: Triangle → Centers → Basic

2.2 Excenters

Menu: Triangle → Centers → Excenters

2.3 Advanced centers

Menu: Triangle → Centers → Advanced

2.4 CLI commands

All triangle centers have CLI commands usable from the Input Bar:

CenterCLI command
CentroidCentroid(A, B, C)
CircumcenterCircumcenter(A, B, C)
OrthocenterOrthocenter(A, B, C)
IncenterIncenter(A, B, C)
Nine-point centerNinePointCenter(A, B, C)
Excenter AExcenterA(A, B, C)
Excenter BExcenterB(A, B, C)
Excenter CExcenterC(A, B, C)
Symmedian / Lemoine pointSymmedianPoint(A, B, C) or LemoinePoint(A, B, C)
Gergonne pointGergonnePoint(A, B, C)
Nagel pointNagelPoint(A, B, C)
Spieker centerSpiekerCenter(A, B, C)
A = (0, 0)
B = (4, 0)
C = (0, 3)
G = Centroid(A, B, C)
O = Circumcenter(A, B, C)
N = NinePointCenter(A, B, C)

3. Triangle Lines

3.1 Euler line

Menu: Triangle → Lines → Euler line

The Euler line passes through the centroid, circumcenter, orthocenter, and nine-point center. It is generated as a line object that updates when the source triangle moves.

There is no dedicated CLI command for the Euler line; use the menu or right-click context menu.

4. Triangle Circles

4.1 Circumcircle

Menu: Triangle → Circles → Circumcircle. Passes through all three vertices. Its center is the circumcenter.

4.2 Incircle

Menu: Triangle → Circles → Incircle. Tangent to all three sides. Its center is the incenter.

4.3 Nine-point circle

Menu: Triangle → Circles → Nine-point circle. Passes through the midpoints of the three sides, the feet of the three altitudes, and the midpoints of the segments from the orthocenter to each vertex. Its center is the nine-point center.

4.4 Excircles

Menu: Triangle → Circles → Excircle opposite ...

5. Triangle Derived Shapes

5.1 Medial triangle

Menu: Triangle → Derived Shapes → Medial triangle

The medial triangle connects the three side midpoints of the source triangle. It updates live when the source triangle changes.

6. Desktop workflow

  1. Create or select a triangle input (three points in order, a Triangle object, or a compatible 3-vertex Polygon).
  2. Open the Triangle menu and choose the target construction.
  3. The construction appears on the canvas immediately.

Right-click a compatible selected triangle input to open the context menu. While a construction tool is active, the status bar or hint area shows the current step.

7. Mobile and tablet workflow

  1. Choose the tool from the triangle constructions drawer.
  2. Tap point 1 of 3 (vertex A).
  3. Tap point 2 of 3 (vertex B).
  4. Tap point 3 of 3 (vertex C).
  5. The construction appears immediately.

In dense scenes, a candidate chooser may appear to help you select the correct point.

8. Live behavior, copy/paste, and macros

9. Related guides

2. Macro / User-defined Tools Guide

This guide covers creating, using, and managing user-defined tools (macros). Macros let you capture a construction as a reusable tool. They replay live semantic geometry — not static coordinate snapshots. When inputs move, macro outputs update in real time.

If you find a bug in v1.3-beta, please report it with:

1. What macros are

A macro is a user-defined tool built from an existing construction. Macro definition captures:

When you apply a macro, FluxGeo replays the recipe using the picked inputs. Intermediate support geometry is recreated as hidden support objects; it does not clutter the canvas. Outputs receive fresh editable labels on each replay.

Macro definitions persist in the project file (.fgeo) and in a user-wide macro library (~/.config/FluxGeo/macros.json on Linux).

2. Creation workflows

Full-selection path:

  1. Build the construction on the canvas (points, lines, circles, etc.).
  2. Select the entire construction (all objects you want captured).
  3. Open Tools → Macros → Create....
  4. Click "Use selection as inputs" — FluxGeo assigns all free (non-dependent) point-like objects as ordered inputs. You can reorder inputs with the ^/v buttons, or toggle input/output checkboxes in the table.
  5. Click "Use selection as outputs" — FluxGeo marks the final visible objects as outputs.
  6. Enter a Name for the macro.
  7. Click "Create".

Canvas-pick path:

  1. Open Tools → Macros → Create....
  2. Click "Pick input from canvas" — the dialog minimises and the hint area says "Pick input: select a point-like object on the canvas."
  3. Click the desired input in order on the canvas. The dialog reopens.
  4. Click "Pick output from canvas" and click the desired output objects.
  5. Click "Stop picking" when done.
  6. Enter a Name and click "Create".

Terminology:

3. Using macros

  1. Open Tools → Macros. The menu lists all defined macros.
  2. Choose a macro name, then click "Use".
  3. The canvas hint area shows: "Select input 1/N: <label>".
  4. Click an existing point-like object, or click empty space to create a new point at that position.
  5. Repeat for each input slot. The hint updates to show the current step.
  6. After the final input, the macro replays the construction. Outputs appear with fresh labels.

Escape or right-click cancels the macro tool. Selecting a different tool also cancels the macro tool.

Managing macros

All management actions are undoable.

4. Supported macro families

CategorySpecific typesSupported transforms
PointsFree point, ObjectPoint, IntersectionPoint, Midpoint, TriangleCenter, HarmonicConjugateReflect (line/point/circle), Rotate, Translate, Dilate, Matrix
LinesLine, Segment, Ray, VectorTranslate, Rotate, Reflect, ReflectPoint, Dilate, ReflectCircle, Matrix
CirclesCenter+Radius, Center+RadiusPoint, ThreePoint; Incircle, NinePoint circle, Excircles A/B/C, Compass (point-based), SemicircleTranslate, Rotate, Reflect, ReflectPoint, Dilate, ReflectCircle, Matrix (standard circles only)
Circular arcsThreePoint arc, Center-Start-End arc; inverted arcs (ReflectCircle)ReflectCircle (basic); Translate, Rotate, Reflect, ReflectPoint, Dilate (inversion images)
Conics5-point Conic(A,B,C,D,E); Ellipse(F1,F2,P); Hyperbola(F1,F2,P); Parabola(F,directrix)Translate, Rotate, Reflect, ReflectPoint, Dilate, Matrix
TrianglesStandard triangle, Medial triangleTranslate, Rotate, Reflect, ReflectPoint, Dilate, Matrix
RectanglesAxis-aligned, rotatableTranslate, Rotate, Reflect, ReflectPoint, Dilate, Matrix
PolygonsGeneral polygonsTranslate, Rotate, Reflect, ReflectPoint, Dilate, Matrix
AnglesStandard angle, Given-constraint angleTranslate, Rotate, Reflect, ReflectPoint, Dilate, Matrix
Inversion imagesInverted line (ReflectCircle), Inverted circle (ReflectCircle), Inverted segment (ReflectCircle)Transformed inversion images supported

Supported input types

Only point-like objects can be macro inputs: Free Point, ObjectPoint, IntersectionPoint, Midpoint, TriangleCenter, HarmonicConjugate. Slider objects are not accepted as macro inputs.

5. Unsupported and rejected families

Object familyReason / diagnostic
Analytic (coefficient-only) conicsConic through 6 coefficients without driver points is not semantically replayable
Conic intersectionsIntersection points involving conic parents are not captured
Inverted polygonsInverted polygon objects are not yet supported
Regular polygonsRegularPolygon capture is deferred
Rigid polygonsRigidPolygon capture is deferred
Transformed triangle-companion circlesTransformed incircle, nine-point circle, excircles, compass, or semicircle circles are rejected
Projective/affine map carriersProjectiveMatrix objects are kept as placeholders and rejected
Slider-bound scalar matricesScalarMatrix with slider bindings is rejected
Function plots, parametric plotsPlot objects are out of scope for macro capture
Text labels, text objectsText objects are out of scope
Generated groupsGenerated group macro capture is deferred
Sequence generatorsSequence macro capture is deferred
Snapshot fallback objectsVisual-only snapshots (non-semantic) are rejected

6. Good macro examples

6.1 Perpendicular bisector / midpoint helper

Goal: Create a tool that takes two points and produces the midpoint and perpendicular bisector line.

Inputs: A, B (2 points). Outputs: Midpoint M of A and B, Perpendicular bisector line through M.

Construction (build once): Create points A and B. Create Midpoint(A, B). Create PerpendicularBisector(A, B).

6.2 Napoleon triangle macro

Goal: Build the outer Napoleon triangle (equilateral triangles outward on each side of an arbitrary triangle).

Inputs: A, B, C (3 points). Outputs: The three centers of the outward equilateral triangles or the Napoleon triangle itself.

6.3 Five-point conic macro

Goal: Create a tool that takes five points and produces the unique conic through all five.

Inputs: A, B, C, D, E (5 points). Outputs: The conic object through all five points.

6.4 Conic with transform or inversion image macro

Goal: Build a conic, then transform it (rotate/translate) or invert it in a circle.

Example: Create F1, F2 (foci) and P (curve point). Create e = Ellipse(F1, F2, P). Create rotation center O. Create r = Rotate(e, 45°, O). Macro: inputs = F1, F2, P, O; output = r.

6.5 Golden rectangle / pentagon builder

Goal: Build a macro that creates a golden-ratio rectangle from two seed points.

Watch for: Use durable numeric variable phi = (1 + sqrt(5))/2 for the golden ratio in your construction. The macro will capture this variable as part of the recipe.

7. Best practices

8. Related guides

3. CLI User Guide

This guide documents the desktop Input Bar / CLI syntax currently supported in FluxGeo v1.3-beta.

1. Quick Start

Type one command per line in the Input Bar.

A = (0, 0)
B = (4, 0)
lineAB = Line(A, B)
m = 0.5
P = A + m * Vector(A, B)
O = (1, 1)
R = Rotate(P, 45°, O)

You can also call commands directly:

Point(2, 3)
Segment(A, B)
Circle(O, A)

2. Numeric Variables and Missing Variables

Durable numeric variables:

m = 0.5
k = 2 + 3
alpha = pi / 4
p = pi
p2 = π
phi = pi*(3 - sqrt(5))
theta = 45°

Supported numeric constants: pi, π. Numeric variables are durable scene objects (not temporary parser locals). They can depend on sliders and existing durable numeric variables. Self-dependencies and dependency cycles are rejected.

Missing-variable slider prompt: If an expression uses unknown scalar identifiers, FluxGeo opens a slider prompt instead of creating partial objects.

P = A + t * Vector(A, B)

If t does not exist yet, you get a prompt to create slider t, then command retry.

Scalar measurement functions:

Distance(A, B)
Distance(segmentOrVector)
Length(segmentOrVector)
SquaredDistance(A, B)
SquaredDistance(segmentOrVector)
SquaredLength(segmentOrVector)

3. Point and Coordinate Assignment

A = (2, 3)
B = (2*a, sin(a))
C = (sqrt(t^2+1), min(max(t,0),1))
Point(2, 3)

Coordinate extractors: x(P), y(P) create live dependencies in point expressions.

4. Vectors and Affine Point Expressions

v = Vector(A, B)
P = A + t * Vector(A, B)
Q = A + t * v
R = A - v
S = A + t*v + s*w

Unicode multiplication operators · and × are supported. Nested transforms work:

X = Rotate(Translate(Rotate(A, 30°, O), Vector(B, C)), -45°, O)

5. Barycentric Forms

P = (1-t)*A + t*B
P = t*A + (1-t)*B
P = 0.2*A + 0.3*B + 0.5*C
P = (1-b-c)*A + b*B + c*C

6. Core Construction Commands

Line(A, B)
Segment(A, B)
Ray(A, B)
Vector(A, B)
Circle(Center, RadiusPoint)
Circle(Center, RadiusValue)
Triangle(A, B, C)
Rectangle(A, B)
Polygon(A, B, C, D)
RigidPolygon(A, B, C, ...)
RegularPolygon(A, B, n)
Square(A, B)
Midpoint(A, B)
PerpendicularBisector(A, B)
AngleBisector(Vertex, Arm1, Arm2)
Polar(P, Circle1)
Tangent(P, Circle1, 0)
Intersect(Object1, Object2)

Conic commands:

Ellipse(F1, F2, P)
Parabola(Focus, DirectrixLine)
Hyperbola(F1, F2, P)
Conic(A, B, C, D, E, F)

Relations:

Collinear(A, B, C)
Parallel(line1, line2)
Concurrent(line1, line2, line3)
Harmonic(A, B, C, D)

ObjectPoint command

P = ObjectPoint(host)

Validated host categories: line, segment, ray, vector, circle, function plot, parametric plot.

Locus command

L = Locus(targetPoint, slider, min, max, samples)
L = Locus(targetPoint, objectPoint, samples)
L = Locus(targetPoint, objectPoint, min, max, samples)

RigidPolygon

RigidPolygon is an independent rigid copy/template of a polygonal shape. Useful for congruence and similarity exploration.

RP1 = RigidPolygon(A, B, C)
tri1 = Triangle(A, B, C)
RP2 = RigidPolygon(tri1)
poly1 = Polygon(A, B, C)
RP3 = RigidPolygon(poly1, 2, 0)

Key elements: anchor handle (translates the whole rigid polygon), rotation handle (rotates the whole rigid polygon), rigid polygon body (preserves internal geometry and size).

Resize via CLI:

ResizeRigidPolygon(RP1, 2)
ResizeRigidPolygon(RP1, Distance(P,Q) / Distance(A,B))

7. Transform Commands

T1 = Translate(A, v)
T2 = Translate(A, Vector(B, C))
R1 = Reflect(A, lineAB)
R2 = Reflect(A, O)
R3 = Reflect(A, circle1)
I = Invert(P, circle1)
R1 = Rotate(A, O, 45°)
R2 = Rotate(A, 45°, O)
D1 = Dilate(A, O, 2)
D2 = Dilate(A, 2, O)

8. Generated Loops and Lattices

for n in -5..5: P_n = A + n * Vector(B, C)
for i in -2..2, j in -2..2: P_i_j = O + i*u + j*v

Multi-statement form:

for n in -5..5:
    P_n = A + n*v
    Q_n = B + n*v
    s_n = Segment(P_n, Q_n)

Named groups:

Grid = for i in 0..10, j in 0..10:
    P_i_j = A + u*(i/10) + v*(j/10)

Supported statement kinds in loop bodies: Affine point, Rotate, Dilate, Reflect, Segment, Polygon.

G = for n in 0..11:
    P_n = Rotate(A, (n * 30)°, O)
    Q_n = Dilate(P_n, (1 + n * 0.15), O)
    s_n = Segment(P_n, Q_n)

Batch paste and mobile expanded CLI: All generated loop commands can be submitted as a multi-line batch by pasting multiple commands at once. On desktop, paste directly into the Input Bar and press Enter. On mobile/web, use the + button to open the CLI Batch Input overlay.

9. Generated Child References and Detach

Seq1[2]
Group4D[0,1,-1,2]
Grid.A[0,0]
Grid.Cell[1,2]
D1 = Detach(Grid.A[1,1])
D2 = Detach(Grid.Cell[1,1])

10. Generated Group Styling and Range Editing

Generated groups expose style sections in Properties: generated points (visible, color, size), generated segments (color and thickness), generated polygons (fill color, fill alpha, outline color, outline thickness). Styles persist across regeneration and save/load.

Range editing: edit start, end, step, click Apply range changes.

11. Unit Graph / Distance Graph Workflow

In Algebra → Unit Graph: Compute Unit Distance Graph (transient overlay), Create Unit Graph (persistent object), Exact unit distance toggle, Clear overlay.

12. Sequence Object vs CLI Generated Loops

Sequence(30)
Sequence(1, 30, 1)
Sequence(Rotate(Dilate(T, 1 + s*k, O), a*k, O), k, 1, 30, 1)

Sequence(...) creates a SequenceGenerator object. Generated loops create labeled generated children inside a GeneratedObjectGroup. These are different systems.

13. Function, Parametric, and Implicit Support

Plot(sin(x) - 3*x)
f(x) = sin(x) - 3*x
Parametric(cos(t), sin(t), -10, 10)

Function composition:

f = Plot(ℯ^(-x^2))
g = Plot(sin(5*x))
m = Plot(f(g(x)))

ObjectPoints and Loci on plotted objects are supported for function and parametric plots. Implicit-plot ObjectPoint/locus drivers are deferred.

14. Common Errors and Fixes

15. GUI Locus Tool Workflow

Slider-driven: Create a target point depending on a slider, select the Locus tool, click the target point, click/select the slider driver.

ObjectPoint-driven: Create an ObjectPoint on a supported host, create a dependent target point, select the Locus tool, click the target point, click the driver ObjectPoint.

16. Deferred / Future Features

Explicitly deferred in v1.3-beta: let m = ... syntax, native Sequence[...] bracket syntax, vector literal shortcuts, native documented Implicit(...) CLI command, ObjectPoint on implicit plots, and others.

17. Example Gallery Files

Use these included scene files for reference and validation: erdos-style-unit-distance-projected-lattice.fgeo, unit-distance-square-lattice.fgeo, generated-affine-cell-grid.fgeo, sequence-spiral-dilate-rotate-triangle.fgeo, function-bell-curve-locus-comparison.fgeo, coordinate-locus-butterfly.fgeo, and more.

4. Object Properties Guide

Object Properties is where you inspect and edit the currently selected object.

If you find a bug in v1.3-beta, please report it with:

1. What this guide is for

2. Opening Object Properties

  1. Select an object on the canvas (or in Algebra).
  2. Object Properties opens for that selection.
  3. Edit the controls shown for that object type.

3. Selecting what you want to edit

4. Basic properties

5. Style properties

Distance graph special style controls: Edge Color, Edge Opacity, Edge Thickness.

A direct Visible checkbox is not exposed in Object Properties. Use Hide/Show workflow instead.

6. Editing generated group ranges

When a GeneratedObjectGroup is selected, Object Properties shows:

Range edits are apply-based, not slider-live. Use group edits or detach where applicable.

7. Editing Sequence objects

When a Sequence object is selected, Object Properties shows the Sequence Generator section with:

Structured-mode fields: Count expression, Start Index, Transform chain, Operation, Angle step, Pivot/reference points, and more.

8. Editing function and parametric plots

9. Unit Graph and Distance Graph properties

For persistent graph objects: Source, Definition, Target distance, Mode (Exact or Tolerance), Epsilon, Point cap, Points, Edges, Max degree, Average degree. Style controls: Edge Color, Edge Opacity, Edge Thickness.

10. Text objects and pinned text

Creating text: Toolbar category Annotations & UI → Text or right-click a point-like object → Text → Add pinned note.

Editing text content: Content, Font Size, Background Box, Show Bounding Box, Background Color.

Pinning text to an object: Select text object → Pin to point... → Click a point-like host. Moving the host moves the text (offset preserved). To unpin: click Detach.

11. Practical mini-workflows

12. Troubleshooting

13. Related guides

5. GUI Docking and Workspace Guide

This guide explains how to arrange your FluxGeo workspace for different tasks.

If you find a UI bug in v1.3-beta, report it with: your .fgeo file, exact steps, screenshots if possible, expected result vs actual result.

1. What this guide is for

Workspace customization helps you stay focused on: construction, generated geometry and Unit Graph analysis, sequence and plotting work, conjecture and discovery workflows, narrative and project workflows.

UI behavior can differ between desktop, web DOM shell, and touch layouts.

2. The main workspace areas

3. Moving and docking panels

Tools, Global Settings, Algebra, Object Properties, and CLI are docked or floating windows. You can drag panel title bars or tabs to rearrange docking positions. You can resize docked panel boundaries.

Default arrangement: Global Settings and Object Properties on the left, Tools in the lower-left area, Algebra on the right side, CLI docked near the bottom.

4. Closing and reopening panels

Verified View menu panel toggles: Tools, Global Settings, Algebra, CLI, Project Navigator, Conjecture Observer (if available), Global Styles, Matrix Lab (build-dependent).

Object Properties opens when you select an object and hides when no object is selected. There is no verified Reset Layout menu item in the current UI.

5. Basic construction layout

Keep canvas central and large, keep Tools visible, keep Algebra visible on one side, keep Object Properties visible, keep CLI visible for quick typed commands.

6. Generated geometry and Unit Graph layout

Keep Algebra open and expanded to Objects and Unit Graph, keep Object Properties open for generated range edits, keep CLI visible for loop commands, keep canvas large enough to inspect overlays and dense point sets.

7. Sequence and plotting layout

Keep CLI open, keep Object Properties open, keep Algebra visible for object browsing, leave enough canvas space for curve shape inspection.

8. Discovery and prover layout

If present: Conjecture Observer visible, Algebra visible, Object Properties visible, canvas kept large for geometric context.

9. Narrative project layout

Project Navigator open, Algebra visible, Object Properties visible, canvas centered for step-by-step scene updates. Project Navigator is a dedicated window and may not behave like normal docked panels.

10. Web, mobile, and tablet notes

Desktop and tablet use docked and floating panel workflow. Touch-oriented mobile mode skips desktop dock layout initialization. Web DOM shell mode uses web shell ownership. Do not expect every desktop docking behavior to match web and mobile layouts.

11. Recovering from a confusing layout

  1. Re-enable needed panels from View.
  2. Select an object to bring Object Properties back.
  3. Resize panel boundaries to reclaim canvas space.
  4. Close extra panels not needed for the current task.
  5. Restart the app if panel placement still feels broken.

12. Related guides

6. Generated Geometry + Unit Graph Tutorial

In this tutorial you will build repeated geometry with command-driven generated loops, reuse generated children in later commands, detach editable snapshots, and inspect unit-distance relationships with Unit Graph tools.

If you hit a bug in v1.3-beta, please report it with: the scene file (.fgeo), the exact commands you typed, what you expected vs what happened.

1. What this guide is for

2. Generated loops vs Sequence Generator

Generated loops: typed as for ... commands, create a generated group with deterministic child labels, support child references like Seq1[2] and Grid.A[0,0], support range edits from Object Properties.

Sequence Generator (Sequence(...)): separate dedicated Sequence object workflow.

3. First generated line of points

A = (0, 0)
B = (1, 0)
C = (0, 1)
u = Vector(A, B)
v = Vector(A, C)

for n in -5..5: P_n = A + n * u

4. Two-index grids and lattices

for i in -2..2, j in -2..2: P_i_j = O + i*u + j*v

5. Multi-statement generated blocks

for n in -5..5:
    P_n = A + n*v
    Q_n = B + n*v
    s_n = Segment(P_n, Q_n)

6. Generated child references

Seq1[2]
Grid.A[0,0]
Grid.Cell[1,2]
Q = (1-t)*Grid.A[0,0] + t*Grid.B[0,0]
S = Segment(G.P[1], G.Q[1])

7. Detaching generated children

D1 = Detach(Grid.A[1,1])
D2 = Detach(Grid.Cell[1,1])

Detach currently supports generated point, segment, and polygon children.

8. Editing generated ranges from Object Properties

Select the generated group → edit Start/End/Step under Loop variables → review Preview object count → click Apply range changes.

Range edits are apply-based, not slider-live. Large ranges can make scenes dense/slower.

9. Unit Graph basics

In Algebra → Unit Graph:

Overlay can analyze selected points or a selected generated group. Persistent UnitGraph creation requires a selected generated group.

10. Distance Graph basics

For persistent graph objects, Object Properties shows: Source, Definition, Target distance, Mode (Exact or Tolerance), Epsilon, Point cap, Points, Edges, Max degree, Average degree.

11-13. Walkthroughs

Square unit lattice: Open unit-distance-square-lattice.fgeo, select the generated group, run Unit Graph controls, edit Start/End/Step in Object Properties.

Affine cell grid: Open generated-affine-cell-grid.fgeo, inspect generated outputs, select the generated group, edit range values.

Erdos-style projected lattice: Open erdos-style-unit-distance-projected-lattice.fgeo, inspect scene structure, reduce ranges if needed, run Unit Graph analysis.

14. Generated loop body statement reference

Supported statements per iteration: Affine point, Rotate, Dilate, Reflect, Segment, Polygon.

Unsupported with specific rejection messages: Circle, Line, Ray, Vector, FunctionPlot, Parametric, ImplicitPlot, Sequence.

16. Troubleshooting

17. Related guides

7. Sequence Generator Tutorial

This guide teaches the dedicated Sequence Generator workflow in FluxGeo. You will learn how to create Sequence objects from the Input Bar, drive them with variables/sliders, edit Sequence properties, and explore the Sequence gallery files.

If you find a bug in v1.3-beta, please report it with: the .fgeo file, the exact commands you typed, what you expected vs what happened.

1. What this guide is for

Use this guide when you want repeated patterns from Sequence(...), including: transform chains (rotate, dilate, translate), point-pattern sequences from coordinate expressions, slider-driven visual experiments.

2. Sequence Generator vs generated loops

Sequence(...) creates a dedicated Sequence object evaluating an expression over an index/range. Generated loops (for ...) create generated groups with generated child references. These are different tools.

Important: GeoGebra-style Sequence[...] is not native FluxGeo v1.3-beta input syntax. Use Sequence(...).

3-4. First Sequence and explicit range

Sequence(30)
Sequence(1, 30, 1)

5-6. Transform-based Sequence patterns

A = (0, 0)
B = (1, 0)
C = (0, 1)
O = (0, 0)
T = Triangle(A, B, C)
s = 0.05
a = 10°
Sequence(Rotate(Dilate(T, 1 + s*k, O), a*k, O), k, 1, 30, 1)
Sequence(Translate(T, q*k*Vector(O,A)), k, 1, 40, 1)

7. Coordinate / point-pattern sequences

Sequence((2,k), k, 1, 5)
Sequence((scale*sqrt(k)*cos(k*phi), scale*sqrt(k)*sin(k*phi)), k, 1, 44, 1)

8. Using sliders and variables

Sequence expressions can use variables. If a variable used in Sequence(...) is missing, FluxGeo can open a slider prompt for missing variables.

9. Editing Sequence properties

Select the Sequence object → open Object Properties → Sequence Generator section. Fields: Body expression, Index variable, Start/End/Increment expression, Visible copies expression, Fill colour. Sequence property edits apply as you edit.

10-14. Walkthroughs

Spiral dilate-rotate triangle: sequence-spiral-dilate-rotate-triangle.fgeo. Expression: Rotate(Dilate(T, 1 + s*k, O), a*k, O). Adjust sliders a and s.

Counter-rotating dilate triangle: sequence-counter-rotating-dilate-triangle.fgeo. Uses negative rotation term: -b*k.

Rotating segment fan: sequence-rotating-segment-fan.fgeo. Expression: Rotate(s, t*k, O).

Polar root spiral points: sequence-polar-root-spiral-points.fgeo. Expression: (scale*sqrt(k)*cos(k*phi), scale*sqrt(k)*sin(k*phi)).

Pattern gallery: sequence-gallery-combined-patterns.fgeo. Browse multiple Sequence objects.

15. Troubleshooting

16. Related guides

8. Function Plotting Guide

This guide covers function plotting and parametric plotting with verified Input Bar / CLI syntax and Object Properties editing.

If something behaves incorrectly, report it with: your .fgeo file, the exact commands you typed, what you expected vs what happened.

1-2. Quick start: first function plot

Plot(sin(x) - 3*x)

A new function plot object appears in the scene. You can select it and edit its expression in Object Properties.

3. Named function assignment

f(x) = sin(x) - 3*x

Creates a function plot labeled f. The assignment form is name(x) = expression. Use x as the function variable.

4. Function composition

f = Plot(ℯ^(-x^2))
g = Plot(sin(5*x))
m = Plot(f(g(x)))

Locus workflow using composition:

A = (-3,0)
B = (3,0)
s = Segment(A,B)
P = ObjectPoint(s)
f = Plot(ℯ^(-x^2))
g = Plot(sin(5*x))
R = (x(P), f(g(x(P))))
M = Locus(R, P, 600)

Only Function Plots are callable this way. Parametric and implicit plots are not scalar-callable by name.

5. Functions with parameters and sliders

a = 1
b = 0
Plot(a*sin(x) + b)

If variables are missing, FluxGeo can prompt you to create sliders.

6. Common supported math functions

sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, sqrt, exp, log, ln, log10, abs, floor, ceil, round, trunc, sgn, sec, csc, cot, min, max, pow, clamp, if.

7-8. Parametric plots

Parametric(cos(t), sin(t), -10, 10)
Parametric(t*cos(t), t*sin(t), 0, 20)

Parameterized parametric plotting is supported:

a = 1
Parametric(a*cos(t), a*sin(t), 0, 6.28318)

9. Plot properties (Object Properties)

Function Plot section: f(x) expression field, Apply Expression, compile status, bound-slider summary, Use As Default.

Parametric Plot section: x(t) and y(t) expression fields, Apply Expressions, t min and t max range fields.

10. ObjectPoints and Loci on Function Plots

f = Plot(x^2)
P = ObjectPoint(f)
Q = (x(P), f(x(P)))
L = Locus(Q, P, 80)

ObjectPoint(f) is supported for function plots. Parametric plot ObjectPoints are supported. Implicit-plot ObjectPoint/locus drivers are deferred.

11. Implicit plotting status (v1.3-beta)

There is no documented native CLI Implicit(...) command. Use implicit plotting UI/tooling if your build exposes it. Object Properties includes an Implicit Plot f(x,y) section.

12. Practical examples

Plot(sin(x))
Plot(cos(x))
f(x) = sin(x) - 3*x
Parametric(cos(t), sin(t), 0, 6.28318)
Parametric(t, sin(t), -10, 10)

13. Troubleshooting

14. Related guides

9. Discovery and Prover Guide

This guide explains the user-facing Conjecture Observer workflow for discovery runs, result review, and optional generated-object creation. This panel is explicitly labeled as an experimental observation engine in the UI.

If you find a bug in v1.3-beta, report it with: your .fgeo file, exact steps and settings, screenshots when possible, expected result vs actual result.

1. What this guide is for

2. Availability and opening the panel

Open from View → Conjecture Observer. If present in your desktop default dock layout, it is docked with the right-side panel group.

3. Panel map and primary controls

4. Running an observation pass

  1. Set Trials to the number of perturbation trials you want.
  2. Optionally enable Aux lines for richer preview overlays.
  3. Click Observe.
  4. Watch Status and the progress bar while the worker runs.
  5. Click Stop if you need to cancel.

Status values: Idle, Running, Done, Cancelled, Error.

5. Understanding status buckets

Treat observed results as hints, not final guarantees.

7. Result families you can see

coincident points, collinear points, midpoints, isosceles/right/equilateral triangles, congruent/similar triangles, equal area triangles, area ratios, rhombi, parallelograms, trapezoids, parallel/perpendicular lines, concurrent lines, congruent/supplementary angles, congruent segments, segment sums, distance ratios, concyclic points, points on circle, line-circle/circle-circle tangencies, congruent circumcircles/incircles, harmonic ranges.

9-10. Inspecting results and Generate Object

Each selectable result row supports: Focus (highlights related entities), Preview (transient witness-style overlay), Generate Object (creates integrated generated object for supported relation types).

Generate Object is implemented for: triangle relations (isosceles, right, equilateral), angle relations (equal angle, supplementary), quadrilateral relations (rhombus, parallelogram, trapezoid), concyclicity.

11. Advanced discovery (virtual helpers)

Controls: Use virtual helper points, Include virtual-helper results, Scan virtual helpers, Enable virtual helper preview overlay, Max virtual points/lines/line-scans, Use parallel discovery, Threads.

Virtual helper points are discovery-only helpers, not scene objects, and are not saved.

13. Recommended user workflow

  1. Build or open a construction with clear geometric structure.
  2. Open Conjecture Observer from View.
  3. Set Trials and run Observe.
  4. Review VERIFIED first, then OBSERVED groups.
  5. Use Focus and Preview on promising rows.
  6. Use Generate Object on supported families when you want integrated geometry output.

14. Troubleshooting

15. Related guides

10. Narrative Project and Project Navigator Guide

This guide explains how to turn a geometry construction into a teachable narrative project using Project Navigator, narrative step snapshots, notes, and optional HTML report export.

If you find a bug in v1.3-beta, report it with: your .fgeo and/or .fgproj file, exact steps, screenshots when possible, expected result vs actual result.

1. What this guide is for

Use this guide when you want to present geometry as a structured story — classroom explanation, theorem exploration notes, step-by-step construction walkthrough, research presentation draft, shareable narrative report.

2. What is a narrative project?

In FluxGeo, a narrative project is a sequence of saved step snapshots plus explanatory text. Verified user-facing elements: Project/Proof title, step timeline cards, per-step Step Description, Hypothesis/Given text, Assertion/Proof text, saved narrative project file (.fgproj), optional HTML report export.

3. Opening the narrative UI

Open from View → Project Navigator. Save/load: File → Save Narrative Project... / Load Narrative Project.... Project Navigator opens as its own dedicated window.

4. Recommended workflow

  1. Build or load a construction (the "scene").
  2. Open Project Navigator from View.
  3. Set a project title. (If your Project Navigator editing opens from a form/button, use that.)
  4. Add steps: each construction/observation action becomes a narrative step. For each step, record: Step Description, Hypothesis/Given, Assertion/Proof.
  5. Navigate back and forth through step timeline cards to review the story.
  6. Optionally export the project to an HTML report.

5-6. Preparing the construction, using labels and pinned notes

Before building narrative steps: label key objects clearly with meaningful names, use pinned notes to annotate geometry, organize object hierarchy in Algebra. Keep the scene clean for clearer step snapshots.

7-8. Saving and loading narrative projects

Save Narrative Project... — saved as .fgproj file. Load Narrative Project... — loads a previously saved .fgproj file. The .fgproj file references the .fgeo scene file. If the scene file moves, loading the project may fail.

9. Exporting or generating output (HTML reports)

FluxGeo can export narrative steps to an HTML report for sharing or review. The generated HTML includes step descriptions, hypotheses, and assertions. The export may not include full canvas renders; saved step previews reflect the scene state at capture time.

10. Using discovery/prover results responsibly

If your build includes Conjecture Observer, you can incorporate discovery results into narrative steps. Only use VERIFIED or manually reviewed results in teaching contexts.

11. Example projects

12. Beta limitations

13. Troubleshooting

15. Related guides

12. CLI Batch Examples

A collection of paste-ready CLI batch scripts for the Input Bar (desktop) or the + expanded CLI overlay (mobile/web). Each example is a self-contained block. Paste it as-is, then press Enter / Run. All examples have been validated in FluxGeo v1.3-beta.

1. ObjectPoint and Locus

Parabola from segment driver

A = (-4, 0)
B = (4, 0)
s = Segment(A, B)
P = ObjectPoint(s)

f = Plot(0.4 * x^2)
Q = (x(P), f(x(P)))
L = Locus(Q, P, 500)

Expected: smooth parabola locus. Drag P along the segment to watch Q trace the curve.

Circle ObjectPoint — Limaçon

O = (0, 0)
R = (3, 0)
c = Circle(O, R)
P = ObjectPoint(c)

K = (1, 0)
Q = Rotate(P, 90°, K)
L = Locus(Q, P, 500)

Expected: a limaçon curve.

Two loci from one driver

O = (0, 0)
A = (3, 0)
c = Circle(O, A)
P = ObjectPoint(c)

K = (1, 0)
Q1 = Rotate(P, 90°, K)
Q2 = Rotate(P, 60°, K)

L1 = Locus(Q1, P, 400)
L2 = Locus(Q2, P, 400)

Sine curve — ObjectPoint on function plot

O = (0, 0)
f = Plot(2 * sin(x))
P = ObjectPoint(f)
Q = Rotate(P, 90°, O)
L = Locus(Q, P, 500)

2. Affine Loops — Flexible Scale

String art parabola envelope

O = (0, 0)
A = (4, 0)
B = (0, 4)
u = Vector(O, A)
v = Vector(O, B)

G = for n in 0..10:
    P_n = O + (n/10)*u
    Q_n = O + (n/10)*v
    s_n = Segment(P_n, Q_n)

Two-index segment grid

O = (0, 0)
A = (1, 0)
B = (0, 1)
u = Vector(O, A)
v = Vector(O, B)

Grid = for i in -2..2, j in -2..2:
    P_i_j = O + i*u + j*v
    Q_i_j = P_i_j + u
    s_i_j = Segment(P_i_j, Q_i_j)

3. Rotate in Loops

Wheel spokes

O = (0, 0)
A = (3, 0)

G = for n in 0..11:
    P_n = Rotate(A, (n * 30)°, O)
    s_n = Segment(O, P_n)

Maurer rose (d = 71, p = 10)

O = (0, 0)
A = (3, 0)

G = for n in 0..36:
    P_n = Rotate(A, (n * 10)°, O)
    Q_n = Rotate(A, (n * 71)°, O)
    s_n = Segment(P_n, Q_n)

4. Dilate in Loops

Growing spiral arms

O = (0, 0)
A = (1, 0)

G = for n in 0..23:
    P_n = Rotate(A, (n * 15)°, O)
    Q_n = Dilate(P_n, (1 + n * 0.1), O)
    s_n = Segment(P_n, Q_n)

Phyllotaxis sunflower (golden angle)

O = (0, 0)
A = (0.4, 0)

G = for n in 0..29:
    P_n = Rotate(A, (n * 137.5)°, O)
    Q_n = Dilate(P_n, (1 + n * 0.12), O)
    s_n = Segment(O, Q_n)

5. Reflect in Loops

Symmetric string art — reflect over line

O = (0, 0)
A = (4, 0)
B = (0, 4)
u = Vector(O, A)
v = Vector(O, B)
axis = Line(O, A)

G = for n in 0..8:
    P_n = O + (n/8)*u
    Q_n = O + (n/8)*v
    R_n = Reflect(P_n, axis)
    T_n = Reflect(Q_n, axis)
    s1_n = Segment(P_n, Q_n)
    s2_n = Segment(R_n, T_n)

6. Chained Transforms

Rotate then Dilate — expanding fan

O = (0, 0)
A = (3, 0)

G = for n in 0..11:
    P_n = Rotate(A, (n * 30)°, O)
    Q_n = Dilate(P_n, (1 + n * 0.2), O)
    s_n = Segment(P_n, Q_n)

7. Two-Index Loops with Transforms

Grid with Rotate

O = (0, 0)
A = (1, 0)
B = (0, 1)
u = Vector(O, A)
v = Vector(O, B)

Grid = for i in -2..2, j in -2..2:
    P_i_j = O + i*u + j*v
    Q_i_j = Rotate(A, (i * 20 + j * 15)°, O)
    s_i_j = Segment(P_i_j, Q_i_j)

Notes

13. FluxGeo Plotting Examples

This page collects ready-to-paste plotting examples for FluxGeo. It covers explicit functions, parametric plots, implicit plots, generated function families, and points whose coordinates are defined by expressions.

1. Explicit function plots

Use Plot(expr) for explicit functions of x.

Basic explicit functions

f1 = Plot(sin(x))
f2 = Plot(x^2)
f3 = Plot(exp(-x^2))
f4 = Plot(log(x))
f5 = Plot(sqrt(x))

Discontinuities and asymptotes

g1 = Plot(1/x)
g2 = Plot(tan(x))
g3 = Plot(arctan(1/x))

Dense explicit functions

d1 = Plot(sin(10*x^2)*cos(5*x))
d2 = Plot(sin(1/x))
d3 = Plot(cos(x^2))

2. Parametric plots

Use Parametric(xExpr, yExpr, tMin, tMax) for curves parameterized by t.

p1 = Parametric(4*sin(5*t + pi/2), 3*sin(4*t), 0, 2*pi)  -- Lissajous
p2 = Parametric(cos(t), sin(t), 0, 2*pi)                   -- Circle
p3 = Parametric(0.08*t*cos(t), 0.08*t*sin(t), 0, 12*pi)   -- Spiral
p4 = Parametric(cos(5*t)*cos(t), cos(5*t)*sin(t), 0, 2*pi) -- Flower

3. Implicit plots

Use Implicit(expr) for equations of the form expr = 0.

Basic implicit correctness scene

C1 = Implicit(x^2 + y^2 - 1)
C2 = Implicit(x^2 + y^2 - 4)
H1 = Implicit(x*y - 1)
H2 = Implicit(x*y + 1)
W1 = Implicit(sin(x) + sin(y))
W2 = Implicit(cos(x) - cos(y))

Mobile/tablet GPU stress scene

C1 = Implicit(x^2 + y^2 - 1)
C2 = Implicit(x^2 + y^2 - 4)
H1 = Implicit(x*y - 1)
H2 = Implicit(x*y + 1)
W1 = Implicit(sin(x) + sin(y))
W2 = Implicit(cos(x) - cos(y))
R1 = Implicit(sin(x^2 + y^2))
R2 = Implicit(cos(x^2 + y^2))
A1 = Implicit((x^2 + y^2)^2 - 4*(x^2 - y^2))
A2 = Implicit(y^2 - x^3 + x)

Heavier trigonometric implicit scene

S1 = Implicit(sin(x) + sin(y))
S2 = Implicit(sin(2*x) + sin(2*y))
S3 = Implicit(sin(3*x) + sin(3*y))
S4 = Implicit(sin(4*x) + sin(4*y))
S5 = Implicit(cos(x*y))
S6 = Implicit(sin(x*y))
S7 = Implicit(cos(x^2 + y^2))
S8 = Implicit(sin(x^2 - y^2))

4. Generated explicit function families

Harmonic sine family

F = for i in 1..12 {
    f_i = Plot(sin(i*x))
}

Shifted logarithm and square-root families

D = for i in -5..5 {
    l_i = Plot(log(x - i))
    s_i = Plot(sqrt(x - i))
}

Rational and arctangent discontinuity family

R = for i in -5..5 {
    h_i = Plot(1/(x - i))
    a_i = Plot(arctan(1/(x - i)))
}

Two-index generated function family

F2 = for i in 1..5 {
    for j in 1..3 {
        f_i_j = Plot(sin(i*x) + 0.2*j)
    }
}

5. Generated parametric families

P1 = Parametric(cos(t), sin(t), 0, 2*pi)
P2 = Parametric(2*cos(t), 2*sin(t), 0, 2*pi)
P3 = Parametric(3*cos(t), 3*sin(t), 0, 2*pi)

6. Points with function expressions as coordinates

Expression-driven points

A = (sin(1), cos(1))
B = (sin(2), cos(2))
C = (sin(3), cos(3))

Generated sampled sine points

SinePts = for i in -20..20 {
    P_i = (0.2*i, sin(0.2*i))
}

Generated sampled circle points

CirclePts = for i in 0..24 {
    P_i = (cos(2*pi*i/24), sin(2*pi*i/24))
}

Generated spiral points

SpiralPts = for i in 0..80 {
    P_i = (0.03*i*cos(0.25*i), 0.03*i*sin(0.25*i))
}

7-8. Mixed demo and heavy stress scenes

f1 = Plot(sin(x))
f2 = Plot(exp(-x^2))
f3 = Plot(1/x)
p1 = Parametric(4*sin(5*t + pi/2), 3*sin(4*t), 0, 2*pi)
C1 = Implicit(x^2 + y^2 - 4)
W1 = Implicit(sin(x) + sin(y))
SinePts = for i in -20..20 {
    P_i = (0.2*i, sin(0.2*i))
}

The heavy mixed stress scene (8) combines 12 harmonic sine plots, 22 rational/arctangent plots, 5 implicit plots, 1 parametric spiral, and 81 spiral points. Use only after basic scenes are working smoothly.

14. Tangential Circle Tools Guide

FluxGeo v1.4-beta adds three Tangential Circle construction tools: 2P + Tangent Circle, P + 2 Tangents Circle, and 3 Tangents Circle. These let you construct circles that pass through points and are tangent to lines, segments, rays, or circles.

A tangential circle construction is an Apollonius-type problem: find a circle that satisfies a mix of point-passing and tangency constraints.

Because these are geometric constraints rather than unique definitions, there can be multiple valid solution circles for a given input set. FluxGeo shows all available solutions as previews and lets you choose the one you want.

Why there can be multiple solutions

Geometric constraints often admit more than one solution. For example, two points and a line can produce two valid circles (one on each side of the line), while a point and two circles can have up to six solutions. The 3 Tangents Circle (Apollonius problem) can yield up to eight distinct solution circles.

FluxGeo computes all real solutions within the visible canvas area and presents them as preview circles before you commit.

Selecting a solution

When a construction has more than one valid solution, FluxGeo shows ghost preview circles for each candidate:

The confirmed circle is created as a permanent circle object in the scene.

Smart point input

During any point-input step you can:

Tangent stage behaviour

When the tool expects a tangent object rather than a point:

This distinction is important: during a tangent stage you cannot create a point. The next stage determines whether a click creates a point or selects a tangent parent.

Tool 1: 2P + Tangent Circle

2P + Tangent Circle icon Creates a circle through two points and tangent to one object.

Workflow:

  1. Select or create the first point on the circle.
  2. Select or create the second point on the circle.
  3. Select the tangent object (line, segment, ray, or circle).
  4. If multiple solutions exist, choose a candidate from the preview.
  5. Confirm with Enter or by clicking the preview circle.

Example — two points and a line:

  1. Place Point A and Point B.
  2. Draw a Line L.
  3. Activate 2P + Tangent Circle.
  4. Click A, then B, then L.
  5. Two preview circles appear — one on each side of the line. Tab to the one you want, then Enter.

Example — two points and a circle:

  1. Place Point A and Point B.
  2. Create Circle C.
  3. Activate 2P + Tangent Circle.
  4. Click A, then B, then C.
  5. Browse the preview candidates and confirm.

Tool 2: P + 2 Tangents Circle

P + 2 Tangents Circle icon Creates a circle through one point and tangent to two objects.

Workflow:

  1. Select or create the point on the circle.
  2. Select the first tangent object.
  3. Select the second tangent object.
  4. Choose a candidate from the preview.
  5. Confirm.

Example — one point, one line, and one circle:

  1. Place Point A.
  2. Draw a Line L and a Circle C.
  3. Activate P + 2 Tangents Circle.
  4. Click A, then L, then C.
  5. Multiple preview circles appear. Choose one.

Tool 3: 3 Tangents Circle

3 Tangents Circle icon Creates a circle tangent to three objects. This is the classical Apollonius problem — a circle tangent to three given circles (where a line is treated as a circle with infinite radius).

Workflow:

  1. Select the first tangent object.
  2. Select the second tangent object.
  3. Select the third tangent object.
  4. Choose a candidate from the preview.
  5. Confirm.

Example — three lines (incircle and excircles):

  1. Draw three non-concurrent lines forming a triangle.
  2. Activate 3 Tangents Circle.
  3. Click each of the three lines.
  4. Four preview circles appear: the incircle and three excircles of the triangle formed by the three lines.

Example — two lines and one circle:

  1. Activate 3 Tangents Circle.
  2. Click two lines and one circle.
  3. Up to eight solution circles may appear.

Example — three circles (Apollonius):

  1. Create three circles that do not contain each other.
  2. Activate 3 Tangents Circle.
  3. Click each circle.
  4. Browse the solutions — up to eight circles are tangent to all three given circles.

Supported tangent objects

Object type Tangency support
Line Full support
Segment Uses supporting-line semantics for tangency
Ray Uses supporting-line semantics for tangency
Circle Full support

Conic, function plot, parametric plot, and implicit plot tangency is not yet supported.

Current limitations

Troubleshooting — no solution found

If no solution circle is found, FluxGeo displays a brief notification. This can happen when:

Try adjusting the positions of your input objects and retry.

15. Tool Reference

Tool Reference — coming soon

A comprehensive reference of all FluxGeo tools, organized by category, with keyboard shortcuts and expected behavior.

This section will be published in a future update.

Beta note: v1.3-beta features may evolve. When reporting issues, include the file name plus exact steps/commands, your FluxGeo version/build, operating system and browser (for web use), expected result, and actual result.