CV05b – Rozděl a spojuj
V minulém příkladu jsme na body vzniklé v místech rozdělení umísťovali geometrii. V tomto příkladu budeme body vzniklé rozdělením spojovat a používat jako podklad pro novou geometrii. Inspirací nám budou sloupy mediatéky v japonském Sendai a kultovní londýnská Okurka. Pokud používáme body vzniklé dělením dvou křivek, je jejich následné spojování jednoduché – použijeme příkaz Line (between two points). Pootočením horní kružnice získáme rotační hyperboloid:
> script ke stažení hyperboloid.gh (ver.gh 0.9.0076)
V případě dělení více křivek a následném spojení bodů polyčárou (Polyline) respektive vyhlazenou bézierovou křivkou (Interpolate) je nutné v matrici bodů zaměnit řádky za sloupce (Flip Matrix). V původní matrici by se totiž polyčárou spojovaly body do rovnoběžek, namísto do vertikálních poledníků.
Řídící kružnice jsou postupně otáčeny (Rotate) o půl modulu a následně individuálně zvětšeny (Scale). Koeficienty pro zvětšování jsou odvozeny z Graph Mapperu – z křivky grafu-funkce se odečítají hodnoty Y dle vstupů na ose X. Spojením dělících bodů ve výsledku vznikne sada spirál.
Pro vytvoření spirál v opačném směru je seznam bodů z každé kružnice posunut o příslušný index (-1, -2, -3, …) a následně matrice opět převrácena (Flip Matrix) z důvodu záměny horizontálního a vertikálního řazení bodů. Vzhledem k indexaci seznamu bodů vzniklých dělením [a, b, c] je potřeba zvýšit indexaci (Graft Tree) i u seznamu posouvacích indexů (z [a] na [a, b, c]).
> script ke stažení gherkin.gh (ver.gh 0.9.0076)
Stejným scriptem byl vytvořen i zjednodušený model londýnské Okurky. Za dobrou práci jsme se odměnili 3D tiskem:
Script generující sloup ze Sendai nespojuje body křivkou (Interpolate), nýbrž polyčárou s přímými úseky. Pro bioničtější výstup jsou souřadnice středů kružnic a jejich poloměry vyvozeny z generátoru náhodných čísel. Script generuje tři seznamy bodů z dělení – s posunem -1, 0 a 1. Dle potřeby jsou pak tyto polyčáry používány nebo zakázány (Enabled).
> script ke stažení sendai.gh (ver.gh 0.9.0076)