({{, (RefLink[GeometricScene, paclet:ref/GeometricScene])[{(Subscript[p, 1]),(Subscript[p, 2]),…},{(Subscript[hyp, 1]),(Subscript[hyp, 2]),…}] 
represents an abstract 2D geometric scene defined by the hypotheses (Subscript[hyp, i]) in terms of the symbolic points (Subscript[p, i]).}, {, (RefLink[GeometricScene, paclet:ref/GeometricScene])[{{(Subscript[p, 1]),(Subscript[p, 2]),…},{(Subscript[k, 1]),(Subscript[k, 2]),…}},hyps]
represents a scene whose hypotheses depend on the symbolic scalar quantities (Subscript[k, i]).}, {, (RefLink[GeometricScene, paclet:ref/GeometricScene])[{{(Subscript[p, 1])->{(Subscript[x, 1]),(Subscript[y, 1])},…},{(Subscript[k, 1])->(Subscript[v, 1]),…}},hyps]
represents a specific instance with explicit values for all points and scalar quantities.}, {, (RefLink[GeometricScene, paclet:ref/GeometricScene])[{{{(Subscript[p, 1])->{(Subscript[x, 1]),(Subscript[y, 1])},…},{(Subscript[k, 1])->(Subscript[v, 1]),…}},…},hyps]
represents a collection of specific instances of the same scene.}, {, (RefLink[GeometricScene, paclet:ref/GeometricScene])[…,…,{(Subscript[con, 1]),(Subscript[con, 2]),…}]
represents a scene together with some conclusions (Subscript[con, i]) about it.}, {, (RefLink[GeometricScene, paclet:ref/GeometricScene])[{(Subscript[scene, 1]),(Subscript[scene, 2]),…}]
combines several scene instances into one scene object.}})

OpenersNotesSection(Spacer1)Details and Options

A (RefLink[GeometricScene, paclet:ref/GeometricScene]) object with explicit coordinates for all points and explicit values for all scalars is normally displayed as a graphical diagram.

In (RefLink[GeometricScene, paclet:ref/GeometricScene])[{(Subscript[p, 1]),(Subscript[p, 2]),…},…], the (Subscript[p, i]) can be strings, symbols or other symbolic expressions.

Functions such as (RefLink[RandomInstance, paclet:ref/RandomInstance]) fill in specific values for the (Subscript[p, i]) and (Subscript[k, i]) in such a way as to satisfy the hypotheses given.

The hypotheses in a scene can list objects that must appear in the scene and can give relations and other assertions about those objects.

The following primitives can be used to represent geometric objects:

The points and scalars in a geometric object can be symbolic or can have explicit values.

The following can be used to represent constructions applied to geometric objects:

The following assertions about geometric objects and their properties can be used:

The following measurements on geometric objects can be used:

(RefLink[GeometricScene, paclet:ref/GeometricScene])[…]["prop"] gives property prop of a geometric scene. Possible properties include:

With explicit scene instances (Subscript[scene, i]), (RefLink[GeometricScene, paclet:ref/GeometricScene])[{(Subscript[scene, 1]),(Subscript[scene, 2]),…}] is converted to a (RefLink[GeometricScene, paclet:ref/GeometricScene]) object in which multiple lists of points and scalar values are given so long as all the (Subscript[scene, i]) are instances of the same abstract scene.

When (RefLink[GeometricScene, paclet:ref/GeometricScene]) represents multiple instances of an abstract scene, it is normally displayed as a (RefLink[MenuView, paclet:ref/MenuView]) object with one instance per menu item.

The display style of geometric objects can be specified using (RefLink[Style, paclet:ref/Style]). Style specifications do not affect the geometric meaning of a scene.

The following options for (RefLink[GeometricScene, paclet:ref/GeometricScene]) can be given:

Functions such as (RefLink[FindGeometricConjectures, paclet:ref/FindGeometricConjectures]) fill in conclusions in (RefLink[GeometricScene, paclet:ref/GeometricScene]) objects.

OpenersPrimaryExamplesSection(Spacer1)Examples  (14)

OpenersExampleSection0(Spacer1)Basic Examples  (2)

Represent a symbolic geometric scene containing a triangle with points a, b, c and a 30° angle:

GeometricScene[{a,b,c},{Triangle[{a,b,c}],PlanarAngle[{a,b,c}]==30°}]

(RefLink[RandomInstance, paclet:ref/RandomInstance]) fills in explicit coordinates for the points:

RandomInstance[%]

This gets the rules giving coordinates for the points:

%["Points"]

Represent a geometric scene with explicit coordinates for points:

GeometricScene[{a->{0,0},b->{1,0},c->{0,1}},{Triangle[{a,b,c}]}]

OpenersExampleSection1(Spacer1)Scope  (3)

Find multiple instances of a scene:

RandomInstance[GeometricScene[{a,b,c,o},{CircleThrough[{a,b,c},o],o==Midpoint[{a,c}],Triangle[{a,b,c}]}],4]

Combine the instances into a single (RefLink[GeometricScene, paclet:ref/GeometricScene]) object:

GeometricScene[%]

Find the coordinates for the points in the scene corresponding to each instance:

%["Points"]

Represent a scene using a (RefLink[GeometricAssertion, paclet:ref/GeometricAssertion]):

RandomInstance[GeometricScene[{{o,a,b,p},{r}},{GeometricAssertion[{Circle[o,r],InfiniteLine[{a,b}]},{"Tangent",p}],Line[{o,p}]}]]

Find conjectures about the scene:

FindGeometricConjectures[%]

Extract the conclusions from the (RefLink[GeometricScene, paclet:ref/GeometricScene]) object:

%["Conclusions"]

(RefLink[Style, paclet:ref/Style]) can be used to apply styles to objects in a geometric scene:

RandomInstance[GeometricScene[{a,b,c},{Style[Triangle[{Style[a,Green],b,c}],Purple],Style[Line[{b,c}],Orange]}]]

OpenersExampleSection2(Spacer1)Options  (1)

OpenersExampleSubsection0(Spacer1)UnconstrainedParameters  (1)

Represent a scene where some of the points are unconstrained:

RandomInstance[GeometricScene[{a,b,c,r,s,t,u,v,w},{GeometricAssertion[{Polygon[{a,b,s,r}],Polygon[{b,c,u,t}],Polygon[{c,a,w,v}]},"Regular","Counterclockwise"],
GeometricAssertion[Style[Polygon[{a,b,c}],Red],"Clockwise"],Area[Triangle[{a,b,c}]]==Area[Triangle[{b,s,t}]]==Area[Triangle[{c,u,v}]]==Area[Triangle[{r,a,w}]]},UnconstrainedParameters->{a,b,c}],RandomSeeding->6]

OpenersExampleSection3(Spacer1)Applications  (6)

Solve for a missing radius:

RandomInstance[GeometricScene[{{a,b,c,d},{r}},{EuclideanDistance[a,b]==40,
EuclideanDistance[b,c]==50,
EuclideanDistance[a,c]==50,GeometricAssertion[{Circle[a,20],Circle[b,20],Circle[c,30],Circle[d,r]},"PairwiseTangent"]}]]

Replace[r,%["Quantities"]]

Represent a scene with a circumscribed triangle with the diameter as an edge:

RandomInstance[GeometricScene[{a,b,c,o},{Triangle[{a,b,c}],CircleThrough[{a,b,c},o],o==Midpoint[{a,c}]}]]

Find conjectures:

FindGeometricConjectures[%]

Extract Thales's theorem:

FindGeometricConjectures[%1,GeometricAssertion[_,"Perpendicular"]]["Conclusions"]

Represent a scene with two sets of collinear points:

RandomInstance[GeometricScene[{a,b,c,d,e,f,x,y,z},{Line[{{a,b,c}}],Line[{d,e,f}],Line[{a,x,e}],Line[{b,x,d}],Line[{a,y,f}],Line[{c,y,d}],Line[{b,z,f}],Line[{c,z,e}],Style[InfiniteLine[{x,z}],Red]}],RandomSeeding->1]

Find conjectures:

FindGeometricConjectures[%]

Discover Pappus's hexagon theorem:

FindGeometricConjectures[%,GeometricAssertion[_,"Collinear"]]["Conclusions"]

Iteratively take circumcenters:

RandomInstance[GeometricScene[{a,b,c,o,oa,ob,oc,k},{o==TriangleCenter[{a,b,c},"Circumcenter"],oa==TriangleCenter[{o,b,c},"Circumcenter"],ob==TriangleCenter[{a,o,c},"Circumcenter"],oc==TriangleCenter[{a,b,o},"Circumcenter"],Line[{a,k,oa}],Line[{b,k,ob}],Line[{c,oc}]}],RandomSeeding->5]

Find conjectures:

FindGeometricConjectures[%]

Discover Kosnita's theorem:

FindGeometricConjectures[%,GeometricAssertion[_,"Collinear"]]["Conclusions"]

Solve for missing angles:

RandomInstance[GeometricScene[{a,b,c,d,e,f,g,h,i,j},{Line[{a,b,c,d}],Line[{d,e,f,g}],Line[{g,h,b,i}],Line[{i,c,e,j}],Line[{j,f,h,a}],PlanarAngle[{b,c,e},"Counterclockwise"]==100°,PlanarAngle[{f,h,b},"Counterclockwise"]==110°,PlanarAngle[{h,a,b},"Counterclockwise"]==35°}],RandomSeeding->1234]

FindGeometricConjectures[%]

FindGeometricConjectures[%,_PlanarAngle==_?NumericQ]["Conclusions"]

Describe a scene with two squares and a quadrilateral formed by taking midpoints:

RandomInstance[GeometricScene[{a,b,c,d,bb,cc,dd,q,r,s,t},{GeometricAssertion[{Polygon[{a,b,c,d}],Polygon[{a,bb,cc,dd}]},"Regular","Counterclockwise"],q==Midpoint[{bb,d}],r==Midpoint[{a,c}],s==Midpoint[{b,dd}],t==Midpoint[{a,cc}],Style[Polygon[{q,r,s,t}],Opacity[0.4],Red]}],RandomSeeding->1]

Find conjectures:

FindGeometricConjectures[%]

Discover the Finsler–Hadwiger theorem:

FindGeometricConjectures[%1,GeometricAssertion[_,"Regular"]]["Conclusions"]

OpenersExampleSection4(Spacer1)Neat Examples  (2)

Decompose a triangle into similar triangles:

RandomInstance[GeometricScene[{a,b,c,d,g,e,f},{
a=={-1/2,0},b=={1/2,0},Line[{f,a,b,e}],
p0==Polygon[{e,g,f}],
p1==Style[Polygon[{a,c,b}],Yellow],
p2==Style[Polygon[{b,d,c}],Magenta],
p3==Style[Polygon[{d,c,g}],Green],
p4==Style[Polygon[{g,c,a}],Blue],
p5==Style[Polygon[{e,b,d}],Purple],
p6==Style[Polygon[{g,a,f}],Orange],
GeometricAssertion[{p0,p1,p2,p3,p4,p5,p6},"Similar"]}],RandomSeeding->4]

Decompose a polygon into similar triangles:

RandomInstance[GeometricScene[
{a,b,c,d,e,o},
{
Polygon[{a,b,c,d,e}],
p1==Style[Triangle[{a,b,o}],Red],
p2==Style[Triangle[{b,o,c}],Blue],
p3==Style[Triangle[{c,d,o}],Yellow],
p4==Style[Triangle[{d,o,e}],Purple],
p5==Style[Triangle[{e,o,a}],Orange],
GeometricAssertion[{p1,p2,p3,p4,p5},"Similar"]
}
],RandomSeeding->6]

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[RandomInstance, paclet:ref/RandomInstance])  ▪  (RefLink[FindGeometricConjectures, paclet:ref/FindGeometricConjectures])  ▪  (RefLink[GeometricAssertion, paclet:ref/GeometricAssertion])  ▪  (RefLink[Graphics, paclet:ref/Graphics])}})}})

({{DocumentationFooterIconsRelatedTutorial.png, ({{Tutorials}, {▪(RefLinkPlain[Synthetic Geometry, paclet:tutorial/SyntheticGeometry])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[Plane Geometry, paclet:guide/PlaneGeometry])}, {▪(RefLinkPlain[Synthetic Geometry, paclet:guide/SyntheticGeometry])}, {▪(RefLinkPlain[Geometric Computation, paclet:guide/GeometricComputation])}, {▪(RefLinkPlain[Solvers over Regions, paclet:guide/GeometricSolvers])}})}})