Ordinary Line Graph

Author

Eric W. Weisstein
September 27, 2024

This notebook downloaded from http://mathworld.wolfram.com/notebooks/GraphTheory/OrdinaryLineGraph.nb.

For more information, see Eric's MathWorld entry http://mathworld.wolfram.com/OrdinaryLineGraph.html.

©2024 Wolfram Research, Inc. except for portions noted otherwise

Definition

From Ed Pegg, Jr.
Sep. 11, 2024

In a set of points, a line containing only two points is an ordinary line.
For a set of points, the edges of an Ordinary Graph are the ordinary lines.

The ordinary graph of the pentagram is the Petersen graph

GraphData

TextGrid[Sort@DeleteCases[GraphData[#,{"#","OrdinaryLineGraphName"}]&/@GraphData[All],{_,_Missing}],Dividers->All]

Examples

<<MathWorld`Graphs`

From https://resources.wolframcloud.com/FunctionRepository/resources/FindExtraordinaryLines

FindExtraordinaryLines[pts_?MatrixQ] := Module[{simp=Identity},SortBy[Select[(Union[Flatten[#1, 1]] & ) /@ GatherBy[Subsets[Range[Length[pts]],{2}],simp[RowReduce[ArrayPad[pts[[#1]],{{0,0},{0,1}},1]]]&], Length[#1] > 2 & ], -Length[#1] & ]
]

OrdinaryLineGraphDiagram[name_,g_Graph,opts___?OptionQ]:=Module[
{
v,configurationlines,ordinarylines,
n=VertexCount[g],
g1,g2,r,style=Directive[Black,16,FontFamily->"Times New Roman"],
connectedpts,
simp=Lookup[{opts},"Simplification",Identity]
},
v=simp[GraphEmbedding[g]];

configurationlines=FindExtraordinaryLines[v];
	(* configurationlines=ResourceFunction["FindExtraordinaryLines" ][v]; *)
	(* calls RootReduce which can be extremely slow on e.g., "CoxeterConfigurationGraph" *)
(*
configurationlines=ConfigurationLines[g,"Restricted"->False];
*)
ordinarylines=Complement[Subsets[Range[n],{2}],Flatten[Subsets[#,{2}]&/@configurationlines,1]];
{
g1=Show[Quiet[ConfigurationDiagram[v,configurationlines,.5,"PointSize"->.05,VertexLabels->None],N::meprec],PlotLabel->Style[Row[{Style[name,Italic],ConfigurationNotation[ConfigurationLines[g,"Restricted"->True]]}," "],style]],
connectedpts=Union@Flatten[ordinarylines];
Annotate[g2=StyleGraphs[Graph[connectedpts,UndirectedEdge@@@ordinarylines,VertexCoordinates->v[[connectedpts]]],EdgeStyle->GrayLevel[.3]],PlotLabel->If[MatchQ[r=RecognizeGraph[g2],{}|"GruenbaumRigbyConfigurationOrdinaryLineGraph"|{"NoncayleyTransitive",{28,61}}],None,Style[Style[GraphData[RecognizeGraph[g2],"Name"],style],Italic]]],
Show[{g1,g2},PlotLabel->None]
}
]

(triples=Monitor[OrdinaryLineGraphDiagram[config=#,If[StringQ[#2],GraphData[#2,"Graph","Configuration"][[1]],#2]]&@@@{

{"Coxeter configuration",Annotate[cox=GraphData["CoxeterConfigurationGraph","Graph","Configuration"][[1]],VertexCoordinates->(vnumeric=N[GraphEmbedding[cox],1000])]},
{"Cremona\[Hyphen]Richmond","CremonaRichmondConfigurationGraph"},
{"Desargues configuration","DesarguesConfigurationGraph"},
{"Grünbaum\[Hyphen]Rigby","GruenbaumRigbyConfigurationGraph"},
{"hexagram configuration","HexagramConfigurationGraph"},
{"Nauru configuration","NauruConfigurationGraph"},
{"octagram configuration","OctagramConfigurationGraph"},
{"pentagram configuration","PentagramConfigurationGraph"},
{"Reye configuration","ReyeConfigurationGraph"}
},config])//Timing

GraphicsGrid[triples,Dividers->All,ImageSize->750,Alignment->Bottom]

By hand

{"Configuration", {{9, 3}, 1}}

OrdinaryLineGraphDiagram@@{"1stnd 9_3 configuration",GraphData[{"Configuration",{{9,3},1}},"Graph","Configuration"][[1]]//GraphEmbedding}//Timing

{"Configuration", {{9, 3}, 2}}

OrdinaryLineGraphDiagram@@{"2nd 9_3 configuration",GraphData[{"Configuration",{{9,3},2}},"Graph","Configuration"][[1]]//GraphEmbedding}//Timing

"CoxeterConfigurationGraph"

ConfigurationNotation[GraphData["CoxeterConfigurationGraph","IncidenceLines"]]

cox=GraphData["CoxeterConfigurationGraph","Graph","Configuration"][[1]]

(olg=OrdinaryLineGraph[cox])//Timing

...ran overnight...

(olgnorootreduce=OrdinaryLineGraph[cox])//Timing

gnumeric=Annotate[cox,VertexCoordinates->N[GraphEmbedding[cox],1000]]

(olgnumeric=OrdinaryLineGraph[gnumeric])//Timing

RecognizeGraph@olgnumeric

"CremonaRichmondConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Cremona-Richmond",GraphData["CremonaRichmondConfigurationGraph","Graph","Configuration"][[1]]}//Timing

g=GraphData["CremonaRichmondConfigurationGraph","Graph","Configuration"][[1]]

(olg=OrdinaryLineGraph[g])//Timing

RecognizeGraph@olg

"DanzerConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Danzer configuration",GraphData["DanzerConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding}

"GrayConfigurationGraph" = {"Grid", {3, 3, 3}}

Needs work to handle non-edge extraordinary lines

OrdinaryLineGraphDiagram@@{"Gray configuration",GraphData["GrayConfigurationGraph","Graph",{"3D","Configuration"}][[1]]//GraphEmbedding}

<<MathWorld`Graphs`

ConfigurationDiagram[GraphData["GrayConfigurationGraph","Graph","Configuration"][[1]],.2]

OrdinaryLineGraph[GraphData["GrayConfigurationGraph","Graph",{"3D","Configuration"}][[1]]]

RecognizeGraph@%

"GruenbaumRigbyConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Grünbaum-Rigby",GraphData["GruenbaumRigbyConfigurationGraph","Graph","Configuration"][[1]]}//Timing

{g=GraphData["GruenbaumRigbyConfigurationGraph","Graph","Configuration"][[1]],olg=OrdinaryLineGraph[g]}//Timing

RecognizeGraph@olg

ConfigurationDiagram[g,.4]

lines=GraphData["GruenbaumRigbyConfigurationGraph","IncidenceLines"]

ConfigurationNotation[lines]

lines1=ConfigurationLines[g]

lines===lines1

*All* extraordinary lines, including those not in the configuration:

lines2=configurationlines=ResourceFunction["FindExtraordinaryLines" ][v]

Complement[lines2,lines1]

"HexagramPlusCenterGraph" [not a configuration]

OrdinaryLineGraphDiagram@@{"hexagram+central point",GraphEmbedding@GraphData["HexagramPlusCenterConfigurationGraph"]}

lines=ResourceFunction["FindExtraordinaryLines"][Append[GraphData["HexagramConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding,{0,0}]]

ConfigurationNotation[lines]

"NauruPlusCenterGraph" [not a configuration]

OrdinaryLineGraphDiagram@@{"Nauru+point",Append[GraphData["NauruConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding,{0,0}]}

lines=ResourceFunction["FindExtraordinaryLines"][Append[GraphData["NauruConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding,{0,0}]]

ConfigurationNotation[lines]

"OctagramConfigurationGraph"

ConfigurationNotation[GraphData["OctagramConfigurationGraph","IncidenceLines"]]

OrdinaryLineGraphDiagram@@{"octagram configuration",GraphData["OctagramConfigurationGraph","Graph","Configuration"][[1]]}//Timing

{g=GraphData["OctagramConfigurationGraph","Graph","Configuration"][[1]],OrdinaryLineGraph[g]}

RecognizeGraph@%

lines=GraphData["OctagramConfigurationGraph","IncidenceLines"]

ConfigurationNotation[lines]

lines1=ConfigurationLines[g]

lines===lines1

*All* extraordinary lines, including those not in the configuration:

lines2=configurationlines=ResourceFunction["FindExtraordinaryLines" ][v]

Complement[lines2,lines1]

"PappusConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Pappus configuration",GraphData["PappusConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding}

"PaschConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Pasch configuration",GraphData["PaschConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding}

"ReyeConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Reye configuration",GraphData["ReyeConfigurationGraph","Graph",{"3D","Configuration"}][[1]]//GraphEmbedding}//Timing

OrdinaryLineGraphDiagram@@{"Reye configuration",GraphData["ReyeConfigurationGraph","Graph","Configuration"][[1]]//GraphEmbedding}

"SchlaefliDoubleSixConfigurationGraph"

OrdinaryLineGraphDiagram@@{"Schläfli double six configuration",GraphData["SchlaefliDoubleSixConfigurationGraph","Graph",{"3D","Configuration"}][[1]]//GraphEmbedding}

Orchard planting configurations

From Ed Pegg Jr.
Sep 11–12, 2024

Ordinary Orchard 16 = {"QuarticTransitive", 23}

o16={{(NumericalApproximation[Root, (RowDefault["1.07", FEExpressionsNumericalApproximationElider]), Root[9-9 ((#1)^2)+((#1)^4)&,3], ]),(1/2) (-7+3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["-0.409", FEExpressionsNumericalApproximationElider]), Root[9-54 ((#1)^2)+((#1)^4)&,2], ]),1},{(NumericalApproximation[Root, (RowDefault["-0.662", FEExpressionsNumericalApproximationElider]), Root[9-21 ((#1)^2)+((#1)^4)&,2], ]),(1/2) (5-3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["0.409", FEExpressionsNumericalApproximationElider]), Root[9-54 ((#1)^2)+((#1)^4)&,3], ]),1},{(NumericalApproximation[Root, (RowDefault["-1.07", FEExpressionsNumericalApproximationElider]), Root[9-9 ((#1)^2)+((#1)^4)&,2], ]),(1/2) (-7+3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["0.662", FEExpressionsNumericalApproximationElider]), Root[9-21 ((#1)^2)+((#1)^4)&,3], ]),(1/2) (5-3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["0.331", FEExpressionsNumericalApproximationElider]), Root[9-84 ((#1)^2)+16 ((#1)^4)&,3], ]),(1/4) (-5+3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["0.204", FEExpressionsNumericalApproximationElider]), Root[9-216 ((#1)^2)+16 ((#1)^4)&,3], ]),-(1/2)},{(NumericalApproximation[Root, (RowDefault["-0.535", FEExpressionsNumericalApproximationElider]), Root[9-36 ((#1)^2)+16 ((#1)^4)&,2], ]),(1/4) (7-3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["-0.331", FEExpressionsNumericalApproximationElider]), Root[9-84 ((#1)^2)+16 ((#1)^4)&,2], ]),(1/4) (-5+3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["0.535", FEExpressionsNumericalApproximationElider]), Root[9-36 ((#1)^2)+16 ((#1)^4)&,3], ]),(1/4) (7-3 (Sqrt[5]))},{(NumericalApproximation[Root, (RowDefault["-0.204", FEExpressionsNumericalApproximationElider]), Root[9-216 ((#1)^2)+16 ((#1)^4)&,2], ]),-(1/2)},{0,0}};

pp=o16;
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[13],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Disk[#,.04]&/@pp}]

Graph[Range[Length[Take[pp,Max[ee]]]],UndirectedEdge@@@ee,VertexCoordinates->Take[pp,Max[ee]]]

RecognizeGraph@%

Orchard 19 = Not Regular

o19={{0,0},{0,(2/5)},{-((Sqrt[3])/5),-(1/5)},{((Sqrt[3])/5),-(1/5)},{(1/5) (NumericalApproximation[Root, (RowDefault["-2.35", FEExpressionsNumericalApproximationElider]), Root[-1323+441 ((#1)^2)-42 ((#1)^4)+((#1)^6)&,3], ]),(1/5) (NumericalApproximation[Root, (RowDefault["-4.74", FEExpressionsNumericalApproximationElider]), Root[7-21 #1+((#1)^3)&,1], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["2.35", FEExpressionsNumericalApproximationElider]), Root[-1323+441 ((#1)^2)-42 ((#1)^4)+((#1)^6)&,4], ]),(1/5) (NumericalApproximation[Root, (RowDefault["-4.74", FEExpressionsNumericalApproximationElider]), Root[7-21 #1+((#1)^3)&,1], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["-5.28", FEExpressionsNumericalApproximationElider]), Root[-1323+441 ((#1)^2)-42 ((#1)^4)+((#1)^6)&,1], ]),(1/5) (NumericalApproximation[Root, (RowDefault["0.335", FEExpressionsNumericalApproximationElider]), Root[7-21 #1+((#1)^3)&,2], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["5.28", FEExpressionsNumericalApproximationElider]), Root[-1323+441 ((#1)^2)-42 ((#1)^4)+((#1)^6)&,6], ]),(1/5) (NumericalApproximation[Root, (RowDefault["0.335", FEExpressionsNumericalApproximationElider]), Root[7-21 #1+((#1)^3)&,2], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["-2.93", FEExpressionsNumericalApproximationElider]), Root[-1323+441 ((#1)^2)-42 ((#1)^4)+((#1)^6)&,2], ]),(1/5) (NumericalApproximation[Root, (RowDefault["4.41", FEExpressionsNumericalApproximationElider]), Root[7-21 #1+((#1)^3)&,3], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["2.93", FEExpressionsNumericalApproximationElider]), Root[-1323+441 ((#1)^2)-42 ((#1)^4)+((#1)^6)&,5], ]),(1/5) (NumericalApproximation[Root, (RowDefault["4.41", FEExpressionsNumericalApproximationElider]), Root[7-21 #1+((#1)^3)&,3], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["-1.47", FEExpressionsNumericalApproximationElider]), Root[-1323+1764 ((#1)^2)-672 ((#1)^4)+64 ((#1)^6)&,2], ]),(1/5) (NumericalApproximation[Root, (RowDefault["-2.20", FEExpressionsNumericalApproximationElider]), Root[-7-42 #1+8 ((#1)^3)&,1], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["1.47", FEExpressionsNumericalApproximationElider]), Root[-1323+1764 ((#1)^2)-672 ((#1)^4)+64 ((#1)^6)&,5], ]),(1/5) (NumericalApproximation[Root, (RowDefault["-2.20", FEExpressionsNumericalApproximationElider]), Root[-7-42 #1+8 ((#1)^3)&,1], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["-2.64", FEExpressionsNumericalApproximationElider]), Root[-1323+1764 ((#1)^2)-672 ((#1)^4)+64 ((#1)^6)&,1], ]),(1/5) (NumericalApproximation[Root, (RowDefault["-0.168", FEExpressionsNumericalApproximationElider]), Root[-7-42 #1+8 ((#1)^3)&,2], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["2.64", FEExpressionsNumericalApproximationElider]), Root[-1323+1764 ((#1)^2)-672 ((#1)^4)+64 ((#1)^6)&,6], ]),(1/5) (NumericalApproximation[Root, (RowDefault["-0.168", FEExpressionsNumericalApproximationElider]), Root[-7-42 #1+8 ((#1)^3)&,2], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["-1.18", FEExpressionsNumericalApproximationElider]), Root[-1323+1764 ((#1)^2)-672 ((#1)^4)+64 ((#1)^6)&,3], ]),(1/5) (NumericalApproximation[Root, (RowDefault["2.37", FEExpressionsNumericalApproximationElider]), Root[-7-42 #1+8 ((#1)^3)&,3], ])},{(1/5) (NumericalApproximation[Root, (RowDefault["1.18", FEExpressionsNumericalApproximationElider]), Root[-1323+1764 ((#1)^2)-672 ((#1)^4)+64 ((#1)^6)&,4], ]),(1/5) (NumericalApproximation[Root, (RowDefault["2.37", FEExpressionsNumericalApproximationElider]), Root[-7-42 #1+8 ((#1)^3)&,3], ])}};

pp=o19;
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[16],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Disk[#,.04]&/@pp}]

Ordinary 11 orchard = not regular

points={{-1,-1},{-1,1},{-1,-2+Sqrt[5]},{0,-1},{0,0},{0,1/2 (-1+Sqrt[5])},{1,-1},{1,1},{1,-2+Sqrt[5]},{-(1/Sqrt[5]),-1+2/Sqrt[5]},{1/Sqrt[5],-1+2/Sqrt[5]}};

pp=points;
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[11],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Disk[#,.04]&/@pp}]

Ordinary Orchard 12 = Not regular

points={{0,0},{6,-6},{-6,6},{-2,-6},{2,6},{6,6},{-6,-6},{-6,0},{6,0},{0,3},{0,-3}};
lines=Union[Flatten[#,1]]&/@GatherBy[Subsets[points,{2}],RowReduce[Append[#,1]&/@#]&];
lines3=Select[lines,Length[#]==3&];
lines2g=Select[lines,Length[#]==2&&(#[[2,2]]-#[[1,2]])/(#[[2,1]]-#[[1,1]])==-(3/2)&];Graphics[{Thick,EdgeForm[Thick],Line[Sort[#]]&/@lines3,Green,InfiniteLine[#]&/@lines2g,{White,Disk[#,.5]}&/@points,
Black,Table[Text[n,points[[n]]],{n,1,11}]
},ImageSize->400,PlotRange->{{-7,7},{-7,7}}]

Ordinary 15_4 Pentagram = Not regular

pp=RootReduce[Append[Join[RootReduce[Table[{Sin[2 Pi n/5],Cos[2 Pi n/5]},{n,0,4}]],RootReduce[1/2 (3-Sqrt[5]) Table[{Sin[2 Pi n/5],-Cos[2 Pi n/5]},{n,0,4}]],RootReduce[(1/2 (3-Sqrt[5]))^2 Table[{Sin[2 Pi n/5],Cos[2 Pi n/5]},{n,0,4}]]],{0,0}]];
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[15],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Disk[#,.01]&/@pp}]

Ordinary Reye == Not regular

reye={{0,0,0},{-1,-1,0},{3,-1,0},{(1/(Sqrt[2])),(1/(Sqrt[2])),0},{0,(1/17) (4+12 (Sqrt[2])),0},{(1/14) (6-9 (Sqrt[2])),(1/14) (-2+3 (Sqrt[2])),0},{0,(1/17) (-2+6 (Sqrt[2])),0},{0,(1/17) (-2+6 (Sqrt[2])),2},{0,(1/17) (-1+3 (Sqrt[2])),1},{(1/7) (-1+2 (Sqrt[2])),(1/119) (-11+50 (Sqrt[2])),(1/7) (6+2 (Sqrt[2]))},{0,(1/289) (-13+141 (Sqrt[2])),(1/17) (15+6 (Sqrt[2]))},{(1/47) (15-18 (Sqrt[2])),(1/799) (-91+222 (Sqrt[2])),(1/47) (42+6 (Sqrt[2]))},{0,(1/17) (-2+6 (Sqrt[2])),(1/137) (78+24 (Sqrt[2]))}};

pp=reye;
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[12],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics3D[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Sphere[#,.1]&/@pp}]

Graph[UndirectedEdge@@@ee]

Ordinary Orchard 17 == Not regular

In the below, each of these 32 tuples summing to zero is on a line:

Select[Subsets[Range[-8,8],{3}],Total[#]==0&]

p17set={{0,4},{3,-3},{-3,5},{1,-5},{-2,0},{-1,-3},{-1,-1},{-3,-5},{0,0},{3,5},{1,1},{1,3},{2,0},{-1,5},{3,-5},{-3,3},{0,-4}};
p17 = #/{1,Sqrt[3]}&/@p17set;
p17not =#/{1,Sqrt[3]}&/@Complement[Select[Tuples[{Range[-3,3],Range[-5,5]}],EvenQ[Total[#]]&],p17set];
Graphics[{EdgeForm[Black],Table[{Style[Text[n-9,p17[[n]]],30], Circle[p17[[n]],1/Sqrt[3]]},{n,1,17}],
LightGray,Disk[#,1/Sqrt[3]]&/@p17not ,Opacity[.4],
ContourPlot[-20 \[FormalX]+5 (\[FormalX]^3)+16 (Sqrt[3]) \[FormalY]+(Sqrt[3]) (\[FormalX]^2) \[FormalY]-3 \[FormalX] (\[FormalY]^2)-3 (Sqrt[3]) (\[FormalY]^3)==0,{\[FormalX],-3.5,3.5},{\[FormalY],-3.5,3.5}][[1]]}]

Sadly, doesn’t lead to a regular graph:

pp=p17;
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[17],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Disk[#,.1]&/@pp}]

Ordinary 25_5 Configuration  == Not Regular

triangle={{Sqrt[3],-1},{0,2},{-Sqrt[3],-1}};
base={{0,0,1},{0,1,1},{1,1,1},{0,1,2},{1,1,2},{1,2,2},{1,2,3}};
coords=Flatten[Permutations/@base,1];
lines=Union[Flatten[#,1]]&/@Select[GatherBy[Subsets[coords,{2}],RowReduce],Length[#]==10&];
Graphics[{
Cyan,Line[ResourceFunction["Areal"][triangle,#/Total[#]]&/@#]&/@lines,
Black,Text[Row[#],ResourceFunction["Areal"][triangle,#/Total[#]]]&/@coords}]

pp=(ResourceFunction["Areal"][triangle,#/Total[#]]&/@coords);
extra=ResourceFunction["FindExtraordinaryLines"][pp];
ee=Complement[Subsets[Range[25],{2}],Flatten[Subsets[#,{2}]&/@extra,1]];

Graphics[{LightGray, Line[pp[[#]]]&/@extra,Thick,Cyan, Line[pp[[#]]]&/@ee, Black,Disk[#,.1]&/@pp}]