Mathematica,2 3 4个多边形,759字节
S=Solve;n=Norm;A=Circle;L=Line;c={#,Norm[#-#2]}&{a_,b_List}~p~{c_,d_List}:=a+l*b/.#&@@S[a+l*b==c+m*d,{l,m}]{a_,b_List}~p~{c_,r_}:=a+l*b/.S[n[c-a-l*b]==r,l]{c_,r_}~p~{d_,q_}:={l,m}/.S[n[c-{l,m}]==r&&n[d-{l,m}]==q,{l,m}]q={0,0};r={1,0};a=q~c~r;b=r~c~q;Graphics@Switch[Input[],3,{s=#&@@p[a,b];A@@@{a,b},Red,L@{q,r,s,q}},4,{k={q,r};{d,e}=a~p~b;j={d,e-d};d=k~p~j~c~q;{e,f}=j~p~d;A@@@{a,b,d},L/@Accumulate/@{k,j},Red,L@{q,e,r,f,q}},6,{d={q,r};e=#&@@d~p~a;f=e~c~q;{g,h}=a~p~f;{i,j}=a~p~b;A@@@{a,b,f},L@{#-2#2,#+2#2}&@@d,Red,L@{r,i,g,e,h,j,r}},8,{k={q,r};{d,e}=a~p~b;j={d,e-d};d=k~p~j~c~q;{e,f}=j~p~d;g=e~c~q;h=q~c~e;i=r~c~e;{o,s}=g~p~h;{t,u}=g~p~i;o={o,2s-2o};s={t,2u-2t};{t,u}=o~p~d;{v,w}=s~p~d;A@@@{a,b,d,g,h,i},L/@Accumulate/@{k,j,o,s},Red,L@{q,t,e,v,r,u,f,w,q}}]
随机项目符号点:
- 通过提示提供输入。
- 我目前支持的输入3,4,6,8。
- 从您的选择中,我选择了以下打印样式:
- 完整的圈子。
- 端点到端点之间的线,除非相关的交叉点位于外部,在这种情况下,我将对范围进行硬编码。
- 没有分数
- 作品是黑色的,多边形是红色的-不是出于美学目的,而是出于打高尔夫球的原因。
- 多边形之间存在一些严重的代码重复。我认为在某个时候,我将对它们全部进行单个构造,枚举沿途的所有线,点和圆,然后减少,
Switch
以为每种构造选择相关的圆和线。这样,我可以在它们之间重用许多原语。
- 该代码包含许多样板函数,这些函数确定所有相关的交点,并从两个点创建圆。
- 有了这个,我将来会添加更多的多边形。
这是未启动的代码:
S = Solve;
n = Norm;
A = Circle;
L = Line;
c = {#, Norm[# - #2]} &
{a_, b_List}~p~{c_, d_List} :=
a + l*b /. # & @@ S[a + l*b == c + m*d, {l, m}]
{a_, b_List}~p~{c_, r_} := a + l*b /. S[n[c - a - l*b] == r, l]
{c_, r_}~p~{d_, q_} := {l, m} /.
S[n[c - {l, m}] == r && n[d - {l, m}] == q, {l, m}]
q = {0, 0};
r = {1, 0};
a = q~c~r;
b = r~c~q;
Graphics@Switch[Input[],
3,
{
s = # & @@ p[a, b];
A @@@ {a, b},
Red,
L@{q, r, s, q}
},
4,
{
k = {q, r};
{d, e} = a~p~b;
j = {d, e - d};
d = k~p~j~c~q;
{e, f} = j~p~d;
A @@@ {a, b, d},
L /@ Accumulate /@ {k, j},
Red,
L@{q, e, r, f, q}
},
6,
{
d = {q, r};
e = # & @@ d~p~a;
f = e~c~q;
{g, h} = a~p~f;
{i, j} = a~p~b;
A @@@ {a, b, f},
L@{# - 2 #2, # + 2 #2} & @@ d,
Red,
L@{r, i, g, e, h, j, r}
},
8,
{
k = {q, r};
{d, e} = a~p~b;
j = {d, e - d};
d = k~p~j~c~q;
{e, f} = j~p~d;
g = e~c~q;
h = q~c~e;
i = r~c~e;
{o, s} = g~p~h;
{t, u} = g~p~i;
o = {o, 2 s - 2 o};
s = {t, 2 u - 2 t};
{t, u} = o~p~d;
{v, w} = s~p~d;
A @@@ {a, b, d, g, h, i},
L /@ Accumulate /@ {k, j, o, s},
Red,
L@{q, t, e, v, r, u, f, w, q}
}
]
这是输出: