I’ve found rational bracings of the tetradecagon and octadecagon (both side counts also having totient 6, like the heptagon and nonagon) using only slightly more than 2 strips per constraint:
In[]:=
cSignAbs[z_]:=If[Denominator[Rationalize[Abs[z],10^-6]]>100,{π,π},With[{Rz=RootReduce[Re[z]],Iz=RootReduce[Im[z]]},RootReduce[{Sign[z],Abs[z]}If[Rz>0∨(Rz==0∧Iz>0),1,-1]]]]
In[]:=
ratgraph[verts_]:=Module[{n=Length[verts],G,vrange,vects,nedge,rods={}},​​G=Graph[Range[n],{},VertexCoordinates->ReIm/@verts];​​Do[​​vrange=Select[Range[i+1,n],Function[j,NoneTrue[rods,SubsetQ[#,{i,j}]&]]];​​vects=Table[Append[cSignAbs[verts[[j]]-verts[[i]]],j],{j,vrange}];​​vects=Select[vects,#[[2]]∈Rationals&];​​vects=SortBy[Append[#[[All,2;;]],{0,i}],First]&/@GatherBy[vects,First];​​Do[​​Do[​​nedge=UndirectedEdge@@pair[[All,2]];​​G=EdgeAdd[G,nedge];​​AnnotationValue[{G,nedge},EdgeLabels]=-Subtract@@pair[[All,1]];​​AnnotationValue[{G,nedge},EdgeWeight]=Length[rods],​​{pair,Partition[rod,2,1]}];​​AppendTo[rods,rod[[All,2]]],​​{rod,vects}],​​{i,n-1}];​​G]
In[]:=
circlepoints[n_]:=FoldList[Plus,0,Exp[2IRange[0,n-2]Pi/n]]
In[]:=
linterp[a_,b_,t_]:=a(1-t)+bt
In[]:=
outer=circlepoints[14];
In[]:=
extra[i_,d_]:={{1,1,-1},{2,1,-2},{2,0,-1},{2,1/3,-4/3},{2,2/3,-5/3}}.{outer[[Mod[i+d,14,1]]],outer[[Mod[i-d,14,1]]],outer[[Mod[i,14,1]]]}
In[]:=
B14=EdgeDelete[ratgraph[Most[Join[outer,extra[2,1],extra[5,-1],extra[1,-1],extra[12,1],extra[7,1],extra[10,-1]]]],{315,420,835,940,1330,1425}]
Out[]=
In[]:=
CountDistinct[AnnotationValue[B14,EdgeWeight]]-14
Out[]=
23
In[]:=
outer2=circlepoints[18];
In[]:=
extra2[k_]:={8/3,8/3-Exp[IPi/3],-5/3,-5/3-Exp[2IPi/3],(1-13Sqrt[-3]/3)/2,linterp[outer2[[9]],outer2[[10]],-5],linterp[outer2[[12]],outer2[[11]],-5]}Exp[kIPi/9]+outer2[[Mod[k+1,18,1]]]
In[]:=
B18de=Append[Flatten[Table[UndirectedEdge@@@Sort/@Partition[{Mod[12+2k,18,1],20+7k,22+7k,Mod[13+2k,18,1]},2,1],{k,0,6}]],970];
In[]:=
B18=EdgeDelete[ratgraph[Join[outer2,Flatten[extra2/@Range[-7,7,2]]][[Join[Range[1,68],Range[70,72],{74}]]]],B18de]
Out[]=
In[]:=
CountDistinct[AnnotationValue[B18,EdgeWeight]]-18
Out[]=
31
Letting [n] denote the regular n-gon’s interior angle, we have the following identities:
* [15] + [10] + [3] = 2π
* [20] + [5] + [4] = 2π
* [24] + [8] + [3] = 2π
* [30] = [5] + [3]
These all lead to efficient rational bracings of the 15-, 20-, 24- and 30-gons – less than three strips per constraint for the 20-gon (as would be expected by extrapolating from previously discussed cases) and two plus overhead for the other three.
In[]:=
butterfly[{p1_,p2_,p3_,p4_},a_,b_]:={linterp[p2,p1,a],linterp[p3,p4,b],linterp[p2,p1,b],linterp[p3,p4,a]}
In[]:=
outer3=circlepoints[15];
In[]:=
spikes=Table[Exp[-IPi/3](outer3[[Mod[11+2k,15,1]]]-outer3[[Mod[10+2k,15,1]]])+outer3[[Mod[10+2k,15,1]]],{k,0,6}];
In[]:=
extra3=Flatten[butterfly[#,3/8,-3/11]&/@Partition[Flatten[Riffle[spikes,Partition[RotateRight[outer3,5][[;;12]],2]]],4,3]];
In[]:=
B15a=ratgraph[Join[outer3,spikes,extra3]];
In[]:=
B15b=EdgeDelete[B15a,Cases[AnnotationValue[B15a,EdgeLabels],(x_->7/8|14/11|97/88)->x]];
In[]:=
B15=EdgeDelete[B15b,Select[Cases[AnnotationValue[B15b,EdgeLabels],(x_->5/8)->x],Count[AnnotationValue[B15b,EdgeWeight],AnnotationValue[{B15b,#},EdgeWeight]]==1&]]
Out[]=
In[]:=
CountDistinct[AnnotationValue[B15,EdgeWeight]]-15
Out[]=
26
In[]:=
outer4=circlepoints[30];
In[]:=
spikes4=Table[Exp[IPi/3](outer4[[Mod[1+2k,30,1]]]-outer4[[Mod[2k,30,1]]])+outer4[[Mod[2k,30,1]]],{k,15}];
In[]:=
extra4=Flatten[butterfly[#,-3/8,3/11]&/@Partition[Flatten[Riffle[spikes4,Partition[outer4[[3;;]],2]]],4,3]];
In[]:=
B30a=ratgraph[Join[outer4,spikes4,extra4[[;;-3]]]];
In[]:=
B30b=EdgeDelete[B30a,Cases[AnnotationValue[B30a,EdgeLabels],(x_->11/8)->x]];
In[]:=
B30=EdgeDelete[B30b,Select[Cases[AnnotationValue[B30b,EdgeLabels],(x_->8/11)->x],Count[AnnotationValue[B30b,EdgeWeight],AnnotationValue[{B30b,#},EdgeWeight]]==1&]]
Out[]=