Makrodefinicja: dice(unroundeddice) |
leftfrontdice(unroundedleftfrontdice) | frontdice(unroundedfrontdice) |
rightfrontdice(unroundedrightfrontdice)
Makrodefinicje pomocnicze: face(unroundedface) | onedot |
twodots | twodotsrotate | threedots |
threedotsrotate | fourdots | sixdots |
sixdotsrotate
Do rysowania ścian kostki (równoległoboków z kropkami) wykorzystywane są przekształcenia afiniczne. W pakiecie TikZ przekształcenie afiniczne
definiuje sie tak:
\pgftransformcm {a} {c} {b} {d} {\pgfpoint {e} {f}}
Powyższe przekształcenie zapisane zapisane tradycyjnie wygląda tak: $A(x;\,y)=(ax+by+e;\,cx+dy+f)$, w szczególności $A(1;\,0)=(a;\,c)+(e;\,f),\,\,A(0;\,1)=(b;\,d)+(e;\,f)$.
\pgfpoint wymaga podania jednostek.Przykład:
\pgfpoint {2cm} {1cm}Po zdefiniowaniu przekształcenia afinicznego $A$, polecenia
\draw figura; \fill figura;
Po definicjach
\pgftransformcm {a} {c} {b} {d} {\pgfpoint {e} {f}} %przekszatłcenie A … \pgftransformcm {g} {h} {i} {j} {\pgfpoint {k} {l}} %przekszatłcenie B
TikZ korzysta ze złożenia A⋅B. Na ogół jest to niepożądane, warto
każde polecenie
\pgftransformcm
\pgftransformresetDefinicje przekształceń afinicznych są „lokalne” – przekształcenie zdefiniowane w otoczeniu tikzpicture nie jest stosowane
w kolejnych otoczeniach tikzpicture.
Prostopadłościan opisany na kostce wygląda tak:

Wartości domyślne są następujące:
c = 3 leftScale = 1.0 rightScale = 1.0 a = leftScale*c b = rightScale*c alfa = 20° beta = 20°
Do zmiany wartości domyślnych służą polecenia:
\edef\size {nowa_wartość_c}
\computeLeft {nowa_wartość_alfa} {nowa_wartość_leftScale}
\computeRight {nowa_wartość_beta} {nowa_wartość_rightScale}Makrodefinicja \dice korzysta z makrodefinicji \face, a makrodefinicja \unroundeddice z makrodefinicji
\unroundedface.
Makrodefinicje \dice i \unroundeddice rysują kostkę skierowaną krawędzią do przodu. Mają cztery argumenty: pierwsze dwa to
współrzędne najniższego punktu, trzeci to ciag trójelementowy, jego elemty informują o liczbie kropek i kolorze widocznych ścian. Kolejność ścian: prawa,
lewa, górna. Czwarty parametr to kolor kropek. Krawędzie są czarne.
\dice {3} {0} {{4/red, 5/red, 2/red}} {white}
\edef\size {2}
\dice {6} {0} {{4/red, 5/red, 2/red}} {white}
Lewa kostka ma domyślną długość krawędzi ($3$), polecenie
\edef\size {2}Prostopadłościan opisany na kostce wygląda tak:

Wartości domyślne są następujące:
a = 3 frontScale = 0.75 b = frontScale*a beta = 36°
Do zmiany wartości domyślnych służą polecenia:
\edef\size {nowa_wartość_a}
\computeFront {nowa_wartość_beta} {nowa_wartość_frontScale}Makrodefinicja leftfrontdice korzysta z makrodefinicji face, a makrodefinicja leftunroundedfrontdice z
makrodefinicji unroundedface.
Makrodefinicje leftfrontdice i leftunroundedfrontdice rysują kostkę skierowaną ścianą do przodu. Mają cztery argumentów:
pierwsze dwa to współrzędne prawego dolnego wierzchołka ściany frontowej (punktu $P$), trzeci to trójelementowyciag, jego elementy informujś o liczbie kropek
i kolorach widocznych ścian. Kolejność ścian: boczna, frontowa, górna. Czwarty parametr to kolor kropek. Krawędzie są czarne.
\leftfrontdice {3} {0} {{4/red, 5/red, 2/red}} {white}
\leftfrontdice {6} {0} {{4/red, 5/red, 2/red}} {white}
Makrodefinicja frontdice działa identycznie jak leftfrontdice, a leftunroundedfrontdice identycznie jak
leftunroundedfrontdice. Istnieją ze względu na wsteczną zgodność.
Prostopadłościan opisany na kostce wygląda tak:

Wartości domyślne są następujące:
a = 3 frontScale = 0.75 b = frontScale*a beta = 36°
Do zmiany wartości domyślnych służą polecenia:
\edef\size {nowa_wartość_a}
\computeFront {nowa_wartość_beta} {nowa_wartość_frontScale}Makrodefinicja leftfrontdice korzysta z makrodefinicji face, a makrodefinicja leftunroundedfrontdice z
makrodefinicji unroundedface.
Makrodefinicje leftfrontdice i leftunroundedfrontdice rysują kostkę skierowaną ścianą do przodu. Mają cztery argumentów:
pierwsze dwa to współrzędne lewego dolnego wierzchołka ściany frontowej (punktu $P$), trzeci to trójelementowy ciąg, jego elementy informujś o liczbie
kropek i kolorach widocznych ścian. Kolejność ścian: boczna, frontowa, górna. Czwarty parametr to kolor kropek. Krawędzie są czarne.
\rightfrontdice {6} {0} {{4/red, 5/blue, 2/red}} {white}
\rightfrontdice {3} {0} {{4/red, 5/blue, 2/red}} {white}
Makrodefinicja face rysuje zaokrąglony kwadrat jednostkowy z kropkami. Ma cztery argumenty: pierwszy to kolor kropek, drugi to kolor
wypełnienia kwadratu – krawędzie są czarne, trzeci to liczba kropek (musi być z zakresu $1$-$6$), czwarty decyduje o położeniu kropek (dopuszczalne
wartości to $1$ i $-1$, nie ma wpływu na wygląd kwadratu gdy liczba kropek wynosi $1$, $4$ lub $5$).
\face {white!50!red} {red} {6} {1}
\pgftransformcm {1} {0} {0} {1} {\pgfpoint {3cm} {0cm}}
\face {white!50!red} {red} {6} {-1}
\pgftransformreset
\pgftransformcm {0.71*3} {0.71*3} {-0.71*3} {0.71*3} {\pgfpoint {5cm} {0cm}}
\face {white!50!red} {red} {6} {1}
Makrodefinicja unroundedface różni się od face tylko tym że rysuje „niezaokrąglony” kwadrat.
\unroundedface {white!50!red} {red} {3} {1}
\pgftransformreset
\pgftransformcm {0.71*3} {0.71*3} {-0.71*3} {0.71*3} {\pgfpoint {3cm} {0cm}}
\unroundedface {white!50!red} {red} {3} {-1}
Każda z tych makrodefinicji rysuje pewną ilość kropek (kółek o promieniu 0,05). Wszystkie mają jeden argument: kolor kropki.
| Polecenie | Współrzędne środków kropek |
|---|---|
\onedot |
$(0,5;\, 0,5)$ |
\twodots |
$(0,3;\, 0,3),\, (0,7;\, 0,7)$ |
\twodotsrotate |
$(0,3;\, 0,7),\, (0,7;\, 0,3)$ |
\threedots |
$(0,25;\, 0,25),\, (0,5;\, 0,5),\, (0,75;\, 0,75)$ |
\threedotsrotate |
$(0,25;\, 0,75),\, (0,5;\, 0,5),\, (0,75;\, 0,25)$ |
\fourdots |
$(0,3;\, 0,3),\, (0,3;\, 0,7),\, (0,7;\, 0,3),\, (0,7;\, 0,7)$ |
\sixdots |
$(0,3;\, 0,25),\, (0,3;\, 0,5),\, (0,3;\, 0,75),\, (0,7;\, 0,25),\, (0,7;\, 0,5),\, (0,7;\, 0,75)$ |
\sixdotsrotate |
$(0,25;\, 0,3),\, (0,25;\, 0,7),\, (0,5;\, 0,3),\, (0,5;\, 0,7),\, (0,75;\, 0,3),\, (0,75;\, 0,7)$ |
Polecenia rysującego pięć kropek nie ma. Pięć kropek jest rysowanych sekwencją poleceń: onedot i fourdots.
\pgftransformreset \pgftransformcm {2} {0} {0} {2} {\pgfpoint {0} {0}} \draw rectangle(1, 1); \onedot {green} \twodots {red} \pgftransformcm {1} {0} {0} {1} {\pgfpoint {1.5cm} {0}} \draw rectangle(1, 1); \threedots {green} \pgftransformcm {1} {0} {0} {1} {\pgfpoint {1.5cm} {0}} \draw rectangle(1, 1); \fourdots {green} \pgftransformcm {1} {0} {0} {1} {\pgfpoint {1.5cm} {0}} \draw rectangle(1, 1); \sixdots {green}
