г. Мастер заставил меня понять, что, хотя у меня была аналитическая форма для областей, которые я мог бы использовать в RegionPlot
, если бы я получил параметризованную форму для границ, то я мог бы использовать ParametricPlot
. Итак, давайте сделаем это!
Круг i th (i=0,...,n-1
) параметризован в комплексной плоскости как
Exp[I t] + Exp[2 i Pi I / n]
для t
в [0, 2 Pi]
.
Мы можем решить, чтобы найти пересечение i
th и (i+o-1)
th кругов, где o
- количество перекрытий, как в оригинале код вопроса. Это дает очки на
point[n_, o_, i_] := {Cos[(2 i Pi)/n] + Cos[(2 Pi (i + o - 1))/n],
Sin[(2 i Pi)/n] + Sin[(2 Pi (i + o - 1))/n]}
Теперь мы можем параметризовать дуги, идущие от начала координат к point[n,o,i]
, и отразить их через линию, идущую от начала координат к point[n,o,i]
. Интерполяция между ними с параметром s
дает параметризованные области
area[n_, o_, i_, t_, s_] := With[{a = 2 Sin[((2 + n - 2 o) (1 - t) )/(2 n) Pi],
b = (2 - 4 i + 2 t + n t - 2 o (1 + t))/(2 n) Pi,
c = ((2 + n - 2 o) (1 - t) - 4 i)/(2 n) Pi},
{a (s Cos[b] + (1 - s) Sin[c]) , -a (s Sin[b] - (1 - s) Cos[c])}]
Тогда мы можем определить
rplot[n_Integer, o_Integer] := ParametricPlot[Evaluate[
Table[area[n, o, i, t, s], {i, 0, n - 1}]], {t, 0, 1}, {s, 0, 1},
Mesh -> False, MaxRecursion -> 1, Frame -> False, Axes -> False,
PlotRange -> 2.1 {{-1, 1}, {-1, 1}},
Epilog -> {Table[Circle[{Cos[t], Sin[t]}, 1], {t, 0, 2 Pi (n-1)/n, 2 Pi/n}],
Red, Point[Table[point[n, o, i], {i, 1, n}]]}]
А GraphicsGrid[{{rplot[3, 2], rplot[5, 3]}, {rplot[7, 2], rplot[4, 1]}}]
производит