TransformLab posunout, otočit, složit

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

Pět stavebních kamenů

Všechny transformace, se kterými se v praxi pracuje, se skládají z pěti druhů. Každý má svoji matici a každý dělá s obrázkem něco, co se dá popsat jednou větou.

operaceco děládettuhá?
posunpřemístí, nic jiného1ano
otočeníotočí kolem počátku1ano
změna měřítkanatáhne podél ossx·syne
zkosposune podle výšky1ne
zrcadlenípřeklopí−1ne

Dva řádky v té tabulce stojí za pozornost. Zkos má determinant 1 a přesto tuhý není: obsah zachová, ale úhly ne — čtverec se změní v kosočtverec o stejném obsahu. A zrcadlení zachová všechny délky i úhly a tuhé také není, protože překlopí orientaci. Kontrolovat jenom determinant tedy nestačí ani jedním směrem.

xy0,91−0,421,000,420,910,500,000,001,00M =determinant1,000= změna obsahutuhá transformace?anodélky se zachovalypořadí je pevné:škála → zkos → otočení → posun
zpětný rozklad: otočení 25,0°, měřítko 1,00 × 1,00
Šest jezdců, jeden domeček. Pořadí operací je schválně pevné a je napsané vpravo dole — se šesti jezdci a volným pořadím by nešlo poznat, co co způsobilo.
R(θ) = [[cos θ, −sin θ, 0], [sin θ, cos θ, 0], [0, 0, 1]]otočení kolem počátku

Otočení je vždycky kolem počátku. Ta matice nic jiného neumí — a je to táž věta jako v kapitole 1, jen jinak. Otočit kolem jiného bodu se dá, ale musí se to složit ze tří operací; má to celou příští kapitolu.

Zpátky z matice na součásti

Z hotové matice se dají složky vyčíst zpátky: poslední sloupec je posun, délka prvního sloupce je měřítko v x, úhel prvního sloupce je otočení. Kalkulačka to dělá a je to užitečné při ladění — matice, která se tváří jako rotace a má měřítko 1,0003, je matice, která o pár tisíc násobení dřív začala driftovat.

Vzorce v této kapitole

R(θ) — otočení kolem počátku
R = [[cosθ, −sinθ, 0], [sinθ, cosθ, 0], [0,0,1]] [—] kap. 2
S — změna měřítka
S = diag(sx, sy, 1) [—] kap. 2
F(a) — zrcadlení v přímce pod úhlem a
F = [[cos2a, sin2a, 0], [sin2a, −cos2a, 0], [0,0,1]] [—] kap. 2