2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Мозаика Пенроуза в Maple
Сообщение21.11.2025, 12:06 
Здравствуйте! В Maple 19 есть пакет Fractals,который рисует незакрашенную апериодическую мозаику Пенроуза,т.к. модуль для этой мозаики не предусматривает опцию закраски.Может быть, кто-нибудь знает,имеется ли возможность в Maple все-таки закрасить мозаику хотя бы в два цвета?

 
 
 
 Re: Мозаика Пенроуза в Maple
Сообщение13.02.2026, 15:54 
genk в сообщении #1710067 писал(а):
Здравствуйте! В Maple 19 есть пакет Fractals,который рисует незакрашенную апериодическую мозаику Пенроуза,т.к. модуль для этой мозаики не предусматривает опцию закраски.Может быть, кто-нибудь знает,имеется ли возможность в Maple все-таки закрасить мозаику хотя бы в два цвета?

Протестировал в gpt . Может.


Изображение

Код в оффтопике

(Оффтоп)

restart;
with(plots);
with(plottools);
phi := (1 + sqrt(5))/2;
subdivide := proc(tris::list) local res, tri, col, A, B, C, P, Q, R; res := NULL; for tri in tris do col := tri[1]; A := tri[2]; B := tri[3]; C := tri[4]; if col = 0 then P := A + (B - A)/phi; res := res, [0, C, P, B], [1, P, C, A]; else Q := B + (A - B)/phi; R := B + (C - B)/phi; res := res, [1, R, C, A], [1, Q, R, B], [0, R, Q, A]; end if; end do; [res]; end proc;
wheel := proc() local i, B, C, res; res := NULL; for i from 0 to 9 do B := exp(1/10*I*(2*i - 1)*Pi); C := exp(1/10*I*(2*i + 1)*Pi); if i mod 2 = 0 then res := res, [0, 0., C, B]; else res := res, [0, 0., B, C]; end if; end do; [res]; end proc;
n := 6;
T := wheel();
for k to n do
T := subdivide(T);
end do;
sc := evalf(phi^n);
toXY := proc(z) local w; w := evalf(sc*z); [Re(w), Im(w)]; end proc;
triFill := proc(tri) local col, A, B, C, pts; col := tri[1]; A := tri[2]; B := tri[3]; C := tri[4]; pts := [toXY(A), toXY(B), toXY(C)]; if col = 0 then polygon(pts, color = red); else polygon(pts, color = blue); end if; end proc;
triEdges := proc(tri) local A, B, C; A := tri[2]; B := tri[3]; C := tri[4]; [line(toXY(C), toXY(A), color = black, thickness = 1), line(toXY(A), toXY(B), color = black, thickness = 1)]; end proc;
Pfill := [seq(triFill(tri), tri in T)];
Pedges := [seq(op(triEdges(tri)), tri in T)];
display([op(Pfill), op(Pedges)], axes = none, scaling = constrained);

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group