Вот такую математическую открытку можно сделать с помощью Wolfram Mathematica. Здесь я расскажу, как получить эти формулы.
На такой рисунок меня вдохновила роза, нарисованная методом Монте-Карло с реализацией на JavaScript.
Вначале нам понадобится двумерный лепесток. Предлагается использовать следующую формулу:
График неравенства:
При заданном y неравенство выполняется для точек (x, y), для которых
координат точек лепестка. Для задания данного множества используем двумерный лепесток. Роль x теперь будет играть
, а роль y будет играть
. Искомое множество имеет вид
равен
, разброс значений
равен
, а минимальное значение
равняется
.
Вот как выглядит полученный лепесток.
Всё, что остаётся сделать -- это взять несколько таких лепестков с разными радиусами сферы. Но для каждого лепестка ещё нужно сделать преобразование сферы по оси z, чтобы размеры всех эллипсоидов по оси z были одинаковыми.
В формулах, приведённых на рисунке, используется параметрическое представление поверхности в сферических координатах, при этом в уравнении для z для всех лепестков берётся одно и то же r.
Исходный код в Wolfram Mathematica:
theta[t_, s_] := (t + 1 + Sqrt[7])/(2*Sqrt[7])*0.4*Pi - 0.4*Pi + 0.1;
phi[t_, s_] := Sqrt[8 - 4*t^2/Abs[t - 3]]*s/(2*Sqrt[2])*Pi/4;
xx[t_] := 0;
yy[t_] := -3 t*(1 - t);
zz[t_] := -11 - 28 t;
rr = 0.5;
x1[t_] := 0;
y1[t_] := 0 + 7 t;
z1[t_] := -25 + 8 t;
r[k_] := 14 - 0.8 k;
phi0[k_] := 0.4*Pi*k;
Show[ParametricPlot3D[
Table[{r[k]*Cos[phi0[k] + phi[t, s]]*Cos[theta[t, s]],
r[k]*Sin[phi0[k] + phi[t, s]]*Cos[theta[t, s]],
r[1]*Sin[theta[t, s]]}, {k, 1, 15}],
{t, -1 - Sqrt[7], -1 + Sqrt[7]}, {s, -1, 1},
PlotStyle ->
Directive[Specularity[RGBColor[1, 0.3, 0], 20],
RGBColor[1, 0, 0.5],
Lighting -> {{"Directional", White, {2, 0, 2}}, {"Ambient",
Darker[White]}}], Mesh -> None],
ParametricPlot3D[{xx[t] + rr*Cos[phi], yy[t] + rr*Sin[phi],
zz[t]}, {t, 0, 1}, {phi, 0, 2 Pi}, Mesh -> None,
PlotStyle -> Darker[Green]],
ParametricPlot3D[{x1[t] + phi*t*(1 - t), y1[t] - 25 phi*t*(1 - t)^3,
z1[t]}, {t, 0, 1}, {phi, -1, 1}, Mesh -> None,
PlotStyle -> Darker[Green]], PlotRange -> All]
На такой рисунок меня вдохновила роза, нарисованная методом Монте-Карло с реализацией на JavaScript.
Вначале нам понадобится двумерный лепесток. Предлагается использовать следующую формулу:
При заданном y неравенство выполняется для точек (x, y), для которых
При этом
Теперь зададим уравнение поверхности в сферических координатах
.
Положим координату r равной константе r0, то есть наша поверхность будет частью сферы радиуса r0. Остаётся задать множество пар 



Здесь
Параметры подобраны так, что разброс значений 





Вот как выглядит полученный лепесток.
Всё, что остаётся сделать -- это взять несколько таких лепестков с разными радиусами сферы. Но для каждого лепестка ещё нужно сделать преобразование сферы по оси z, чтобы размеры всех эллипсоидов по оси z были одинаковыми.
В формулах, приведённых на рисунке, используется параметрическое представление поверхности в сферических координатах, при этом в уравнении для z для всех лепестков берётся одно и то же r.
Исходный код в Wolfram Mathematica:
theta[t_, s_] := (t + 1 + Sqrt[7])/(2*Sqrt[7])*0.4*Pi - 0.4*Pi + 0.1;
phi[t_, s_] := Sqrt[8 - 4*t^2/Abs[t - 3]]*s/(2*Sqrt[2])*Pi/4;
xx[t_] := 0;
yy[t_] := -3 t*(1 - t);
zz[t_] := -11 - 28 t;
rr = 0.5;
x1[t_] := 0;
y1[t_] := 0 + 7 t;
z1[t_] := -25 + 8 t;
r[k_] := 14 - 0.8 k;
phi0[k_] := 0.4*Pi*k;
Show[ParametricPlot3D[
Table[{r[k]*Cos[phi0[k] + phi[t, s]]*Cos[theta[t, s]],
r[k]*Sin[phi0[k] + phi[t, s]]*Cos[theta[t, s]],
r[1]*Sin[theta[t, s]]}, {k, 1, 15}],
{t, -1 - Sqrt[7], -1 + Sqrt[7]}, {s, -1, 1},
PlotStyle ->
Directive[Specularity[RGBColor[1, 0.3, 0], 20],
RGBColor[1, 0, 0.5],
Lighting -> {{"Directional", White, {2, 0, 2}}, {"Ambient",
Darker[White]}}], Mesh -> None],
ParametricPlot3D[{xx[t] + rr*Cos[phi], yy[t] + rr*Sin[phi],
zz[t]}, {t, 0, 1}, {phi, 0, 2 Pi}, Mesh -> None,
PlotStyle -> Darker[Green]],
ParametricPlot3D[{x1[t] + phi*t*(1 - t), y1[t] - 25 phi*t*(1 - t)^3,
z1[t]}, {t, 0, 1}, {phi, -1, 1}, Mesh -> None,
PlotStyle -> Darker[Green]], PlotRange -> All]
Комментарии
Отправить комментарий