Community documentation for FluxGeo v1.3-beta — covering constructions, macros, CLI, plotting, generated geometry, discovery, and narrative projects.
This guide covers triangle center, line, circle, and derived shape constructions.
If you find a bug in v1.3-beta, please report it with:
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.
Menu: Triangle → Centers → Basic
Menu: Triangle → Centers → Excenters
Menu: Triangle → Centers → Advanced
All triangle centers have CLI commands usable from the Input Bar:
| Center | CLI command |
|---|---|
| Centroid | Centroid(A, B, C) |
| Circumcenter | Circumcenter(A, B, C) |
| Orthocenter | Orthocenter(A, B, C) |
| Incenter | Incenter(A, B, C) |
| Nine-point center | NinePointCenter(A, B, C) |
| Excenter A | ExcenterA(A, B, C) |
| Excenter B | ExcenterB(A, B, C) |
| Excenter C | ExcenterC(A, B, C) |
| Symmedian / Lemoine point | SymmedianPoint(A, B, C) or LemoinePoint(A, B, C) |
| Gergonne point | GergonnePoint(A, B, C) |
| Nagel point | NagelPoint(A, B, C) |
| Spieker center | SpiekerCenter(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)
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.
Menu: Triangle → Circles → Circumcircle. Passes through all three vertices. Its center is the circumcenter.
Menu: Triangle → Circles → Incircle. Tangent to all three sides. Its center is the incenter.
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.
Menu: Triangle → Circles → Excircle opposite ...
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.
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.
In dense scenes, a candidate chooser may appear to help you select the correct point.
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:
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).
Full-selection path:
Canvas-pick path:
Terminology:
Escape or right-click cancels the macro tool. Selecting a different tool also cancels the macro tool.
All management actions are undoable.
| Category | Specific types | Supported transforms |
|---|---|---|
| Points | Free point, ObjectPoint, IntersectionPoint, Midpoint, TriangleCenter, HarmonicConjugate | Reflect (line/point/circle), Rotate, Translate, Dilate, Matrix |
| Lines | Line, Segment, Ray, Vector | Translate, Rotate, Reflect, ReflectPoint, Dilate, ReflectCircle, Matrix |
| Circles | Center+Radius, Center+RadiusPoint, ThreePoint; Incircle, NinePoint circle, Excircles A/B/C, Compass (point-based), Semicircle | Translate, Rotate, Reflect, ReflectPoint, Dilate, ReflectCircle, Matrix (standard circles only) |
| Circular arcs | ThreePoint arc, Center-Start-End arc; inverted arcs (ReflectCircle) | ReflectCircle (basic); Translate, Rotate, Reflect, ReflectPoint, Dilate (inversion images) |
| Conics | 5-point Conic(A,B,C,D,E); Ellipse(F1,F2,P); Hyperbola(F1,F2,P); Parabola(F,directrix) | Translate, Rotate, Reflect, ReflectPoint, Dilate, Matrix |
| Triangles | Standard triangle, Medial triangle | Translate, Rotate, Reflect, ReflectPoint, Dilate, Matrix |
| Rectangles | Axis-aligned, rotatable | Translate, Rotate, Reflect, ReflectPoint, Dilate, Matrix |
| Polygons | General polygons | Translate, Rotate, Reflect, ReflectPoint, Dilate, Matrix |
| Angles | Standard angle, Given-constraint angle | Translate, Rotate, Reflect, ReflectPoint, Dilate, Matrix |
| Inversion images | Inverted line (ReflectCircle), Inverted circle (ReflectCircle), Inverted segment (ReflectCircle) | Transformed inversion images supported |
Only point-like objects can be macro inputs: Free Point, ObjectPoint, IntersectionPoint, Midpoint, TriangleCenter, HarmonicConjugate. Slider objects are not accepted as macro inputs.
| Object family | Reason / diagnostic |
|---|---|
| Analytic (coefficient-only) conics | Conic through 6 coefficients without driver points is not semantically replayable |
| Conic intersections | Intersection points involving conic parents are not captured |
| Inverted polygons | Inverted polygon objects are not yet supported |
| Regular polygons | RegularPolygon capture is deferred |
| Rigid polygons | RigidPolygon capture is deferred |
| Transformed triangle-companion circles | Transformed incircle, nine-point circle, excircles, compass, or semicircle circles are rejected |
| Projective/affine map carriers | ProjectiveMatrix objects are kept as placeholders and rejected |
| Slider-bound scalar matrices | ScalarMatrix with slider bindings is rejected |
| Function plots, parametric plots | Plot objects are out of scope for macro capture |
| Text labels, text objects | Text objects are out of scope |
| Generated groups | Generated group macro capture is deferred |
| Sequence generators | Sequence macro capture is deferred |
| Snapshot fallback objects | Visual-only snapshots (non-semantic) are rejected |
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).
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.
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.
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.
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.
This guide documents the desktop Input Bar / CLI syntax currently supported in FluxGeo v1.3-beta.
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)
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)
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.
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)
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
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)
P = ObjectPoint(host)
Validated host categories: line, segment, ray, vector, circle, function plot, parametric plot.
L = Locus(targetPoint, slider, min, max, samples) L = Locus(targetPoint, objectPoint, samples) L = Locus(targetPoint, objectPoint, min, max, samples)
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))
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)
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.
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])
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.
In Algebra → Unit Graph: Compute Unit Distance Graph (transient overlay), Create Unit Graph (persistent object), Exact unit distance toggle, Clear overlay.
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.
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.
Detach(...) child snapshot.: in loop header, non-integer range bounds, label template missing loop variables.(1-b-c)*A + b*B + c*C.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.
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.
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.
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:
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.
When a GeneratedObjectGroup is selected, Object Properties shows:
Range edits are apply-based, not slider-live. Use group edits or detach where applicable.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Keep CLI open, keep Object Properties open, keep Algebra visible for object browsing, leave enough canvas space for curve shape inspection.
If present: Conjecture Observer visible, Algebra visible, Object Properties visible, canvas kept large for geometric context.
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.
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.
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.
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.
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
for i in -2..2, j in -2..2: P_i_j = O + i*u + j*v
for n in -5..5:
P_n = A + n*v
Q_n = B + n*v
s_n = Segment(P_n, Q_n)
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])
D1 = Detach(Grid.A[1,1]) D2 = Detach(Grid.Cell[1,1])
Detach currently supports generated point, segment, and polygon children.
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.
In Algebra → Unit Graph:
Overlay can analyze selected points or a selected generated group. Persistent UnitGraph creation requires a selected generated group.
For persistent graph objects, Object Properties shows: Source, Definition, Target distance, Mode (Exact or Tolerance), Epsilon, Point cap, Points, Edges, Max degree, Average degree.
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.
Supported statements per iteration: Affine point, Rotate, Dilate, Reflect, Segment, Polygon.
Unsupported with specific rejection messages: Circle, Line, Ray, Vector, FunctionPlot, Parametric, ImplicitPlot, Sequence.
:, non-integer ranges, valid variable names.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.
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.
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(...).
Sequence(30) Sequence(1, 30, 1)
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)
Sequence((2,k), k, 1, 5) Sequence((scale*sqrt(k)*cos(k*phi), scale*sqrt(k)*sin(k*phi)), k, 1, 44, 1)
Sequence expressions can use variables. If a variable used in Sequence(...) is missing, FluxGeo can open a slider prompt for missing variables.
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.
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.
Sequence(...) syntax.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.
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.
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.
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.
a = 1 b = 0 Plot(a*sin(x) + b)
If variables are missing, FluxGeo can prompt you to create sliders.
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.
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)
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.
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.
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.
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)
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.
Open from View → Conjecture Observer. If present in your desktop default dock layout, it is docked with the right-side panel group.
Status values: Idle, Running, Done, Cancelled, Error.
Treat observed results as hints, not final guarantees.
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.
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.
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.
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.
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.
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.
Open from View → Project Navigator. Save/load: File → Save Narrative Project... / Load Narrative Project.... Project Navigator opens as its own dedicated window.
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.
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.
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.
If your build includes Conjecture Observer, you can incorporate discovery results into narrative steps. Only use VERIFIED or manually reviewed results in teaching contexts.
.fgproj is a separate file from .fgeo. Moving the scene file may break the reference..fgproj might reference a moved .fgeo file.FluxGeo includes example .fgeo scenes that help you learn major workflows quickly.
Use examples to practice: Input Bar and CLI commands, generated geometry and Unit Graph workflows, Sequence Generator patterns, discovery/prover exploration on real scenes, narrative/project write-up workflows.
examples/ folder.unit-distance-square-lattice.fgeo, generated-affine-cell-grid.fgeo, erdos-style-unit-distance-projected-lattice.fgeo.sequence-spiral-dilate-rotate-triangle.fgeo, sequence-counter-rotating-dilate-triangle.fgeo, sequence-rotating-segment-fan.fgeo, sequence-polar-root-spiral-points.fgeo, sequence-gallery-combined-patterns.fgeo.unit-distance-square-lattice.fgeo: Two-index generated lattice scene, Unit Graph workflow, generated group range editing.
generated-affine-cell-grid.fgeo: Multi-statement generated cell grid, generated child reference usage, range editing and regeneration.
erdos-style-unit-distance-projected-lattice.fgeo: Denser generated unit-distance exploration scene, stress case for Unit Graph.
sequence-spiral-dilate-rotate-triangle.fgeo: Rotate+dilate triangle sequence pattern.
sequence-counter-rotating-dilate-triangle.fgeo: Opposing rotation direction with dilation.
sequence-rotating-segment-fan.fgeo: Repeated segment rotation fan structure.
sequence-polar-root-spiral-points.fgeo: Coordinate-expression sequence point cloud pattern.
sequence-gallery-combined-patterns.fgeo: Multiple sequence styles in one scene.
Function composition locus:
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)
Discovery: Start with a small triangle or quadrilateral scene, then try discovery on selected generated or sequence examples.
Narrative: Use any example scene to build your own narrative timeline in Project Navigator.
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.
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.
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.
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)
O = (0, 0) f = Plot(2 * sin(x)) P = ObjectPoint(f) Q = Rotate(P, 90°, O) L = Locus(Q, P, 500)
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)
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)
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)
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)
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)
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)
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)
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)
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)
pi and π are equivalent in all expressions.n is an integer; divide with / for fractional steps: (n/10).+ expanded CLI overlay and press Run.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.
Use Plot(expr) for explicit functions of x.
f1 = Plot(sin(x)) f2 = Plot(x^2) f3 = Plot(exp(-x^2)) f4 = Plot(log(x)) f5 = Plot(sqrt(x))
g1 = Plot(1/x) g2 = Plot(tan(x)) g3 = Plot(arctan(1/x))
d1 = Plot(sin(10*x^2)*cos(5*x)) d2 = Plot(sin(1/x)) d3 = Plot(cos(x^2))
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
Use Implicit(expr) for equations of the form expr = 0.
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))
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)
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))
F = for i in 1..12 {
f_i = Plot(sin(i*x))
}
D = for i in -5..5 {
l_i = Plot(log(x - i))
s_i = Plot(sqrt(x - i))
}
R = for i in -5..5 {
h_i = Plot(1/(x - i))
a_i = Plot(arctan(1/(x - i)))
}
F2 = for i in 1..5 {
for j in 1..3 {
f_i_j = Plot(sin(i*x) + 0.2*j)
}
}
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)
A = (sin(1), cos(1)) B = (sin(2), cos(2)) C = (sin(3), cos(3))
SinePts = for i in -20..20 {
P_i = (0.2*i, sin(0.2*i))
}
CirclePts = for i in 0..24 {
P_i = (cos(2*pi*i/24), sin(2*pi*i/24))
}
SpiralPts = for i in 0..80 {
P_i = (0.03*i*cos(0.25*i), 0.03*i*sin(0.25*i))
}
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.
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.
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.
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.
During any point-input step you can:
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.
Creates a circle through two points and tangent to one object.
Workflow:
Example — two points and a line:
2P + Tangent Circle.Example — two points and a circle:
2P + Tangent Circle.
Creates a circle through one point and tangent to two objects.
Workflow:
Example — one point, one line, and one circle:
P + 2 Tangents Circle.
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:
Example — three lines (incircle and excircles):
3 Tangents Circle.Example — two lines and one circle:
3 Tangents Circle.Example — three circles (Apollonius):
3 Tangents Circle.| 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.
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.
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.