Křivky v přírodě i v počítačové grafice – svět spirál (dokončení)

21. 9. 2021
Doba čtení: 47 minut

Sdílet

 Autor: Wikipedia, podle licence: CC-BY-SA
V dnešní části seriálu o křivkách, které nalezneme v přírodě, architektuře, technice i v počítačové grafice, dokončíme popis různých typů spirál. Zabývat se budeme například klotoidou a evolventou.

Obsah

1. Křivky v přírodě i v počítačové grafice – svět spirál (dokončení)

2. Mandelbrotova množina

3. Konvergence či divergence posloupnosti zn

4. Algoritmus vykreslení Mandelbrotovy množiny

5. Vykreslení Mandelbrotovy množiny knihovnou Matplotlib

6. Použití knihovny PIL/Pillow pro zobrazení Mandelbrotovy množiny

7. Vykreslení spirál v Mandelbrotově množině

8. Spirály v Mandelbrotově množině

9. Klotoidy

10. Fresnelovy integrály

11. Vzájemná souvislost mezi funkcemi S(x)C(x)

12. Vykreslení klotoidy s využitím funkcí S(x)C(x)

13. Obrazec s opakujícími se spirálami odvozený od Fresnelových integrálů

14. Evolventy

15. Evolventa vzniklá odvalováním polopřímky po kružnici

16. Zakomponování kružnice, okolo níž se polopřímka odvaluje

17. Přidání koeficientu a do rovnice evolventy

18. Evolventa vznikající odvalováním polopřímky po cykloidě

19. Repositář s demonstračními příklady

20. Odkazy na Internetu

1. Křivky v přírodě i v počítačové grafice – svět spirál (dokončení)

V dnešní části seriálu o křivkách, které nalezneme v přírodě, architektuře, technice i v počítačové grafice dokončíme popis různých typů spirál, což je téma, kterému jsme se začali věnovat minule. Článek je rozdělen na dvě části. V první části si ukážeme, jak se vykresluje Mandelbrotova množina zmíněná minule a taktéž si na demonstračním příkladu ukážeme, kde v ní lze nalézt spirály (přitom s určitou dávkou zobecnění budeme Mandelbrotovu množinu považovat za implicitní popis křivky – zde konkrétně nekonečné křivky s topologickou dimenzí jedna a s fraktální dimenzí rovnou dvěma).

Obrázek 1: Logaritmická spirála je jednou z nejdůležitějších spirál vůbec.

Ve druhé části dnešního článku si popíšeme dvojici spirál, které v současnosti nacházejí velké praktické uplatnění. Jedná se v první řadě o klotoidu využívanou při návrzích tvarů silničních zatáček a železničních oblouků (přesněji řečeno při návrhu přechodnic mezi rovným úsekem a kruhovým obloukem, popř. přechodnic mezi dvojicí oblouků s různým poloměrem (popř. směrem ohybu). A druhou důležitou křivkou (která má v některých specifických případech tvar spirály) je evolventa, podle jejíhož tvaru se konstruují zuby ozubených kol.

Obrázek 2: Hyperbolická spirála s jedním ramenem.

2. Mandelbrotova množina

„[I have] had the privilege to enrich Fatou-Julia's theory by adding a new part, by suggesting what Douady and Hubbard (1982) have called "Mandelbrot set or M-set“ … I have proceeded in a way loathed by theoreticians… I have wandered, contemplated, dissected, with the astonishing equivalent of a microscope that the computer is… Unforgettable images, even with the primitive tools of 1980… I did this work in 1979–1980…"
Benoit B. Mandelbrot

Mandelbrotova množina byla, podobně jako Juliovy množiny, objevena při analýze některých zdánlivě jednoduchých dynamických systémů se zpětnou vazbou. Analýza dynamických systémů se zabývá otázkou budoucího stavu systému, pokud iterativně provádíme výpočet s tou samou funkcí (resp. se skupinou funkcí). Některé výsledky z analytického i numerického výzkumu těchto systémů byly publikovány již počátkem minulého století (samozřejmě, že se bez pomoci počítačů jednalo o poměrně nezáživné matematické stati). Těmito dynamickými systémy se zabývali především matematici Gaston Julia (1893–1978) a Pierre Fatou (1878–1929). Na jejich práci, které souvisely především s Juliovými množinami (tak však byly nazvány až o více než půlstoletí později) navázal v sedmdesátých letech minulého století matematik Benoit B. Mandelbrot.

Jako součást své výzkumné práce využil Benoit Mandelbrot možností tehdy dostupné počítačové grafiky – to ovšem bylo na matematika dosti nezvyklé. V tomto období byly v pracovní skupině Mandelbrota a prakticky ve stejném čase i dvojicí Brookse a Matelskiho vytvořeny první obrazy fraktálu dnes nazývaného Mandelbrotova množina. První rastrové obrázky byly, vzhledem k dané době a omezeným možnostem použité výpočetní techniky, pouze černobílé, vzbudily však velký zájem jak mezi odbornou, tak i laickou veřejností. Z matematického pohledu jsou samozřejmě korektní pouze černobílé (resp. monochromatické) obrázky, protože se rozlišují pouze dvě možnosti: divergence či konvergence posloupnosti hodnot zn. V počítačové grafice se posléze došlo k barevnému „vylepšování “ obrázků, při kterém jsou barvy pixelům přiřazovány například podle počtu iterací, vzdálenosti čísla zn od počátku atd.

Mandelbrotova množina je vytvořena pomocí jednoduchého dynamického systému, který je založený na iteraci funkce komplexní paraboly:

zn+1=zn2+c

kde proměnné z a c leží v komplexní rovině.

V průběhu výpočtu se hodnota z postupně mění, zatímco hodnota c zůstává konstantní – tato se mění pouze při přesunu výpočtu na nový bod. Celý iterační proces začíná s určitou startovní hodnotou z0, takže systém postupně generuje sekvenci hodnot zk, které nazýváme orbit. Postup si ukážeme na prvních čtyřech iteracích:

z1=(z0)2+c
z2=((z0)2+c)2+c
z3=(((z0)2+c)2+c)2+c
z4=((((z0)2+c)2+c)2+c)2+c
 

3. Konvergence či divergence posloupnosti zn

Při práci se systémem popsaným v předchozím textu nás zajímá, zda pro danou startovní hodnotu z0 a konstantu c posloupnost zn konverguje či diverguje. Ukazuje se, že pro některé počáteční hodnoty nastává také oscilace – hodnoty zn se opakují s určitou periodou, to znamená, že platí rovnost zn=zn+i, kde i je perioda oscilace. Bližším studiem vlivu počátečních podmínek na budoucí stav systému se zabýval právě Benoit B. Mandelbrot a před ním i Fatou.

Mandelbrot se omezit na případ, kdy počáteční hodnota z0 je nulová a pro každý počítaný bod se mění pouze konstanta c. Iterativním výpočtem vzniknou pouze takzvané orbity nuly. Orbity nuly lze podle jejich vlastností rozdělit do dvou kategorií:

  1. Pro některé hodnoty c je orbit konečný, tzn. všechny hodnoty zn jsou konečné. Do této kategorie spadají také hodnoty, které oscilují.
  2. Pro další hodnoty c je orbit nekonečný, tzn. po určité době rostou hodnoty zn nade všechny meze.

Mandelbrotova množina je v tomto případě definována jako množina všech komplexních čísel c, které produkují konečný orbit nuly.

Abychom mohli úspěšně vykreslit hrubý obrázek Mandelbrotovy množiny, musíme zjistit, které body do této množiny zcela jistě nepatří. Jak již víme z předchozího textu, jedná se o ty body, jejichž orbit míří na Riemanově sféře (což je, zjednodušeně řečeno, komplexní rovina pouze s jedním nekonečnem) k nekonečnu. Je však možné jednoduše zjistit, že nějaký orbit míří k nekonečnu v konečném čase, resp. v konečném počtu kroků? Ukazuje se, že pro některé body je možné vytvořit jednoduchý test, jehož princip je ukázán na následujících řádcích.

Při testu na nekonečnost orbitu použijeme důkazu, že pro |c|<=|z| a |z|>2 posloupnost diverguje. Využije se přitom trojúhelníkové nerovnosti pro komplexní čísla:

|a+b| >= |a|-|b|,

kde za obecnou hodnotu a dosadíme z×z a za obecnou hodnotu b komplexní konstantu c:

|z×z+c| >= |z×z|-|c| = (|z|)2-|c|

Je nutné najít minimální hodnotu |z|, při jejímž překročení je |z×z+c|>|z|. Nazvěme tuto hodnotu r. Potom r×r-|c|=r resp. r×r-r-|c|=0 a dále z řešení kvadratické rovnice vyplývá:

r=(1+(1+4|c|)1/2)/2.

Známe tedy hodnotu r. Jestliže je velikost |z| větší než r, systém diverguje. Pokud iterace začíná s hodnotou z=0, je po první iteraci z=c. V předchozích vzorcích můžeme r nahradit |c| a dostaneme vztah:

|c|×|c|-2|c| = 0 tedy |c|=2 resp. |z|=2 protože z=c

Posloupnost tedy pro |z|>2 skutečně diverguje. V průběhu iteračního výpočtu tedy stačí testovat, zda je velikost |zk|>2. Podmínka pro divergenci posloupnosti mimo jiné také znamená, že všechny body Mandelbrotovy množiny leží v komplexní rovině uvnitř kružnice o poloměru 2. Je to dáno tím, že pro |c|>2 je po první iteraci také |z|>2 a z podmínek uvedených výše vyplývá, že posloupnost diverguje.

Z předchozího textu vyplývá, že všechny body Mandelbrotovy množiny mají absolutní hodnotu menší než 2. Také víme, že jestliže v průběhu iteračního procesu absolutní hodnota z překročí 2, posloupnost diverguje a počítaný bod tudíž neleží v Mandelbrotově množině. Opačný test, tj. test na konvergenci posloupnosti nelze přímo provést. Používá se proto metoda, při které se zvolí dostatečně velký počet iterací, přičemž v každém kroku je testováno, zda absolutní hodnota z nepřekročí 2. Pokud tato možnost nastane, bod uvnitř Mandelbrotovy množiny zcela jistě neleží. Pokud proběhne výpočet všech iterací aniž by absolutní hodnota z překročila 2, je počítaný bod prohlášen za prvek Mandelbrotovy množiny. Tato metoda je sice nepřesná, ale lze ji v podstatě libovolně zpřesňovat zvyšováním maximálního počtu iterací. Hodnota 2 použitá v testu se v literatuře nazývá bailout.

4. Algoritmus vykreslení Mandelbrotovy množiny

Postup při výpočtu bodů ležících v Mandelbrotově množině lze zapsat pomocí jednoduchého algoritmu. Vstupem algoritmu je komplexní číslo c a konstanta určující maximální počet iterací MaxIter:

  1. nastav iter:=0
  2. nastav z:=0
  3. pokud iter<MaxIter prováděj smyčku:
  4.     nastav z:=z2+c
  5.     jestliže |z|>2 bod neleží v Mandelbrotově množině; konec
  6.     nastav iter:=iter+1
  7. konec smyčky
  8. bod leží uvnitř Mandelbrotovy množiny; konec

Tento algoritmus lze velmi jednoduše implementovat s tím, že proměnné z a c jsou komplexní čísla, tj. nabývají komplexních hodnot. Protože ve většině programovacích jazyků nejsou komplexní čísla zavedena jako základní datové typy, pomůžeme si tím, že každé komplexní číslo reprezentujeme jeho reálnou a imaginární složkou (v Pythonu to ovšem není nutné). Proto například původní komplexní proměnná z bude reprezentována dvojicí reálných proměnných zx a zy a komplexní proměnná c bude reprezentována dvojicí cx a cy.

Absolutní hodnotu |z| lze rozepsat jako sqrt(zx*zx+zy*zy), kde sqrt() je matematická funkce provádějící druhou odmocninu. V reálných programech není použit přímo výpočet absolutní hodnoty, protože vyčíslení odmocniny je časově velmi náročné. Poměrně složitou podmínku ve tvaru sqrt(zx*zx+zy*zy)>2 lze na obou stranách umocnit (obě strany jsou vždy kladné) a použít novou podmínku, kde není zapotřebí provádět časově náročný výpočet odmocnin. Výsledný tvar podmínky má tvar: zx*zx+zy*zy>4. Výraz z:=z2+c, jež je zapsán pomocí dvou komplexních proměnných z a c, lze rozepsat na jeho reálnou a imaginární část:

zx'=zx*zx-zy*zy+cx
zy'=2*zx*zy+cy

Kde zx, zy, cx, cy, zx' a zy' jsou proměnné nabývající reálných hodnot. Aby nebylo nutné používat dvou nových proměnných zx' a zy', použijí se již předpočítané mocniny reálné a imaginární složky z. Také je vhodné prohodit oba výrazy, aby nebylo nutné zavádět nové pomocné proměnné:

zx2=zx*zx
zy2=zy*zy
zy=2*zx*zy+cy
zx=zx2-zy2+cx 

Hodnoty v proměnných zx2 a zy2 budou použity při testu zx2+zy2>4. Nyní již můžeme celý algoritmus pro výpočet bodů Mandelbrotovy množiny přepsat do konkrétního programovacího jazyka. Jako příklad je uveden zápis v programovacím jazyce C (praktické příklady ovšem budou používat Python, v němž je zápis jednodušší):

/*
 * Parametrem této funkce je komplexní číslo C, pro které
 * probíhá test.
 */
int MandelbrotTest(double cx, double cy)
{
    double      zx,zy,zx2,zy2,cx,cy;    // komplexní proměnná Z
    int         iter;                   // počet iterací
 
    zx=0;                               // vynulovat komplexní proměnnou C
    zy=0;
 
    iter=0;                             // nastavit počitadlo iterací
 
    do {                                // iterační smyčka
        zx2=zx*zx;                      // zx^2
        zy2=zy*zy;                      // zy^2
        zy=2.0*zx*zy+cy;
        zx=zx2-zy2+cx;                  // z:=z^2+c
        iter++;                         // zvýšit hodnotu počitadla iterací
    } while (iter<maxiter && (zx2+zy2)<4.0);// test na počet iterací a bailout
 
    if (iter==maxiter)                  // bod leží uvnitř Mandelbrotovy množiny
        return LEZI_UVNITR;
    else                                // bod leží vně Mandelbrotovy množiny
        return LEZI_VNE;
}

Výše uvedený algoritmus lze přímo použít pro vykreslení Mandelbrotovy množiny. Bílé pixely reprezentují body v komplexní rovině, jež neleží v Mandelbrotově množině, černé pixely naopak reprezentují body v Mandelbrotově množině ležící. Symetrie Mandelbrotovy množiny okolo reálné osy je způsobena tím, že změna znaménka cy způsobí pouze změnu znaménka proměnné zy nikoliv zx. Na výpočet absolutní hodnoty |z| nemají znaménka reálné a imaginární složky žádný vliv. Funkce MandelbrotTest() je volaná pro každý počítaný (resp. zobrazovaný) pixel. Při větších velikostech pixelů může dojít ke znatelnému prodloužení výpočtu z důvodu častého volání této funkce. Proto je výhodnější vložit tělo funkce MandelbrotTest() přímo do hlavní výpočetní smyčky programu, kde se provádí nastavení jednotlivých pixelů.

5. Vykreslení Mandelbrotovy množiny knihovnou Matplotlib

Mandelbrotovu množinu je možné výše popsaným algoritmem vykreslit různými způsoby, a to v prakticky jakémkoli programovacím jazyce (ostatně se jedná o pravděpodobně jeden z nejvíce reimplementovaných algoritmů). Nejprve si ukažme způsob založený na použití knihovny Matplotlib. Nejedná se sice o ideální řešení, protože je výsledný rastrový obrázek přeškálován, ovšem zdrojový kód by měl být dobře pochopitelný:

"""Vykreslení klasické Mandelbrotovy množiny."""
 
import numpy as np
import matplotlib.pyplot as plt
 
import palette_greens
 
 
# velikost bitmapy s nakresleným fraktálem
WIDTH = 256
HEIGHT = 256
 
 
def mandelbrot(cx, cy, maxiter):
    """Výpočet, kolik iterací je nutné pro opuštění jednotkového kruhu."""
    c = complex(cx, cy)
    z = 0
    for i in range(0, maxiter):
        if abs(z) > 2:
            return i
        z = z * z + c
    return 0
 
 
def recalc_fractal(image, palette, xmin, ymin, xmax, ymax, maxiter=1000):
    """Přepočet celého fraktálu."""
    stepx = (xmax - xmin)/WIDTH
    stepy = (ymax - ymin)/HEIGHT
 
    y1 = ymin
    for y in range(0, HEIGHT):
        x1 = xmin
        for x in range(0, WIDTH):
            i = mandelbrot(x1, y1, maxiter)
            i = 3*i % 256
            for index in range(0, 3):
                image[y][x][index] = palette[i][index]
                image[y][x][index] = palette[i][index]
                image[y][x][index] = palette[i][index]
            x1 += stepx
        y1 += stepy
 
 
# vytvoření prázdné bitmapy
image = np.zeros(shape=(HEIGHT, WIDTH, 3), dtype=np.uint8)
 
recalc_fractal(image, palette_greens.palette, -2.0, -1.5, 1.0, 1.5, 1000)
 
# vykreslení bitmapy do grafu
plt.figure(1, figsize=(8, 6), dpi=100)
plt.imshow(image)
 
# uložení grafu do rastrového obrázku
plt.savefig("test.png")
 
# zobrazení grafu s bitmapou
plt.show()

Obrázek 3: Mandelbrotova množina vykreslená předchozím demonstračním příkladem založeným na použití knihovny Matplotlib.

6. Použití knihovny PIL/Pillow pro zobrazení Mandelbrotovy množiny

V tomto konkrétním případě, v němž obarvujeme jednotlivé pixely rastrového obrázku, je vhodnější namísto knihovny Matplotlib použít knihovnu PIL, resp. Pillow, která je určena přímo pro manipulaci s rastrovými obrázky a umožňuje i jejich ukládání do souborů. Upravený tvar demonstračního příkladu, ovšem založený na stejném algoritmu výpočtu bodů v Mandelbrotově množině, bude vypadat takto:

#!/usr/bin/env python
 
"""Vykreslení klasické Mandelbrotovy množiny."""
 
from PIL import Image
import palette_greens
 
# textura by měla být čtvercová a její šířka i výška by měla být
# mocninou čísla 2
IMAGE_WIDTH = 256
IMAGE_HEIGHT = 256
 
 
def mandelbrot(cx, cy, maxiter):
    """Výpočet, kolik iterací je nutné pro opuštění jednotkového kruhu."""
    c = complex(cx, cy)
    z = 0
    for i in range(0, maxiter):
        if abs(z) > 2:
            return i
        z = z * z + c
    return 0
 
 
def recalc_fractal(image, palette, xmin, ymin, xmax, ymax, maxiter=1000):
    """Přepočet celého fraktálu."""
    width, height = image.size       # rozměry obrázku
    stepx = (xmax - xmin)/width
    stepy = (ymax - ymin)/height
 
    y1 = ymin
    for y in range(0, height):
        x1 = xmin
        for x in range(0, width):
            i = mandelbrot(x1, y1, maxiter)
            i = 3*i % 256
            color = (palette[i][0], palette[i][1], palette[i][2])
            image.putpixel((x, y), color)
            x1 += stepx
        y1 += stepy
 
 
image = Image.new("RGB", (IMAGE_WIDTH, IMAGE_HEIGHT))
 
recalc_fractal(image, palette_greens.palette, -2.0, -1.5, 1.0, 1.5, 1000)
image.save("mandelbrot.png")

Obrázek 4: Mandelbrotova množina vykreslená předchozím demonstračním příkladem založeným na knihovně PIL, popř. Pillow.

7. Vykreslení spirál v Mandelbrotově množině

Nyní již zbývá udělat poslední krok – nepatrně upravit předchozí skript do takové podoby, aby vykreslil ty části Mandelbrotovy množiny, v nichž nalezneme spirály. Tento skript obsahuje souřadnice známých oblastí Mandelbrotovy množiny, o nichž jsme se ostatně zmínili minule:

#!/usr/bin/env python
 
"""Vykreslení spirál v Mandelbrotově množině."""
 
from PIL import Image
import palette_mandmap
 
IMAGE_WIDTH = 800
IMAGE_HEIGHT = 600
 
 
def mandelbrot(cx, cy, maxiter):
    """Výpočet, kolik iterací je nutné pro opuštění jednotkového kruhu."""
    c = complex(cx, cy)
    z = 0
    for i in range(0, maxiter):
        if abs(z) > 2:
            return i
        z = z * z + c
    return 0
 
 
def recalc_fractal(image, palette, xmin, ymin, xmax, ymax, maxiter=1000):
    """Přepočet celého fraktálu."""
    width, height = image.size       # rozměry obrázku
    stepx = (xmax - xmin)/width
    stepy = (ymax - ymin)/height
 
    y1 = ymin
    for y in range(0, height):
        x1 = xmin
        for x in range(0, width):
            i = mandelbrot(x1, y1, maxiter)
            i = 3*i % 256
            color = (palette[i][0], palette[i][1], palette[i][2])
            image.putpixel((x, y), color)
            x1 += stepx
        y1 += stepy
 
 
image = Image.new("RGB", (IMAGE_WIDTH, IMAGE_HEIGHT))
 
recalc_fractal(image, palette_mandmap.palette,
               -0.769824999999999998320, -0.109270000000000000000,
               -0.766247499999999998426, -0.106570000000000000000, 1000)
image.save("spiral_1.png")
 
recalc_fractal(image, palette_mandmap.palette,
               -0.171119200000000013445, 0.657309400000000000000,
               -0.169318975000000013445, 0.658660750000000000000, 1000)
image.save("spiral_2.png")
 
recalc_fractal(image, palette_mandmap.palette,
               -0.207190825000000012496, 0.676656624999999999983,
               -0.206107925000000012496, 0.677468799999999999983, 1000)
image.save("spiral_3.png")
 
recalc_fractal(image, palette_mandmap.palette,
               -0.540623850000000003876, 0.523798050000000000019,
               -0.532306600000000003876, 0.530031950000000000019, 1000)
image.save("spiral_4.png")

8. Spirály v Mandelbrotově množině

Předchozí demonstrační příklad vykreslil tyto spirály:

Obrázek 5: Spirála se dvěma rameny.

Obrázek 6: Spirála se třemi rameny.

Obrázek 7: Opět spirála se třemi rameny.

Obrázek 8: Spirála se čtyřmi rameny.

9. Klotoidy

Ve druhé části dnešního článku si popíšeme dvojici spirál, které mají velké uplatnění v praxi. První z těchto spirál se nazývá klotoida, ovšem existují i její alternativní pojmenování – Cornuova spirála, popř. Eulerova spirála. Klotoida má jednu velmi důležitou vlastnost – její křivost se spojitě (tedy bez skoků) mění s proběhnutou dráhou; její zakřivení tedy plynule roste, přičemž v počátku (což ovšem v tomto případě není pól spirály) je zakřivení nulové (křivka je zde přímá). Klotoida ze svého počátku pokračuje oběma směry, přičemž zakřivení v jednom směru je shodné, jako zakřivení ve směru opačném – pouze se mění znaménko zakřivení (křivost je převrácená hodnota poloměru oskulační kružnice v daném místě křivky).

Poznámka: v demonstračních příkladech budeme vykreslovat pouze jednu polovinu křivky, ovšem všechny výpočty lze jednoduše zobecnit tak, aby se vykreslila celá klotoida.

Právě výše zmíněná vlastnost klotoidy, tedy změna křivosti s proběhnutou dráhou, se ukázala jako velmi důležitá při návrhu přechodnic, což jsou úseky silnic, popř. železničních kolejí mezi rovným úsekem a kruhovým obloukem, popř. úseky mezi dvěma kruhovými oblouky. Pokud by totiž byl (na silnici) rovný úsek přímo navázán na kruhový oblouk, vyžadovalo by to skokovou změnu natočení volantu. Naproti tomu pokud bude mezi přímým úsekem a kruhovým obloukem přechodnice, bude změna natočení volantu plynulá, od nulové polohy až do polohy, která odpovídá poloměru oblouku.

Poznámka: na železnici se dříve pro návrh přechodnic používala kubická parabola, dnes je to ovšem i zde klotoida.

10. Fresnelovy integrály

Před ukázáním příkladu, který nakreslí skutečnou klotoidu, se ještě musíme seznámit s jedním termínem – Fresnelův integrál. Ten popisuje dvojici funkcí, přičemž každá má jediný nezávislý parametr x:

Při snaze o vykreslení průběhu těchto funkcí nahradíme výpočet integrálu za výpočet sumy s dostatečně malým krokem dt. Následující demonstrační příklad vykreslí průběh funkce S(x):

import numpy as np
import matplotlib.pyplot as plt
import math
 
# počet hodnot na x-ové ose
points = 300
 
# integrační krok
step = 0.001
 
# hodnoty na x-ové ose
x = np.linspace(0, 5, points)
 
 
# výpočet Fresnelova integrálu S(x)
def fresnel_s(x):
    result = 0
    for t in np.arange(0, x, step):
        result += math.sin(t**2)
    return result*step
 
 
# vektorizace předchozí funkce
fresnel_s_v = np.vectorize(fresnel_s)
 
# aplikace vektorizované funkce na všechny x-ové hodnoty
y = fresnel_s_v(x)
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Fresnelův integrál S(x)', fontsize=15)
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y, 'g-')
 
# uložení grafu do rastrového obrázku
plt.savefig("fresnel_s.png")
 
# zobrazení grafu
plt.show()

S tímto výsledkem:

Obrázek 10: Výsledek postupného výpočtu Fresnelova integrálu S(x).

Prakticky totožným programovým kódem, jen s nepatrnou změnou ve výpočtu, můžeme vykreslit průběh funkce C(x), což je ukázáno na dalším demonstračním příkladu:

import numpy as np
import matplotlib.pyplot as plt
import math
 
# počet hodnot na x-ové ose
points = 300
 
# integrační krok
step = 0.001
 
# hodnoty na x-ové ose
x = np.linspace(0, 5, points)
 
 
# výpočet Fresnelova integrálu C(x)
def fresnel_c(x):
    result = 0
    for t in np.arange(0, x, step):
        result += math.cos(t**2)
    return result*step
 
 
# vektorizace předchozí funkce
fresnel_c_v = np.vectorize(fresnel_c)
 
# aplikace vektorizované funkce na všechny x-ové hodnoty
y = fresnel_c_v(x)
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Fresnelův integrál C(x)', fontsize=15)
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y, 'g-')
 
# uložení grafu do rastrového obrázku
plt.savefig("fresnel_c.png")
 
# zobrazení grafu
plt.show()

Obrázek 11: Výsledek postupného výpočtu Fresnelova integrálu C(x).

11. Vzájemná souvislost mezi funkcemi S(x)C(x)

Označení funkcí S(x) a C(x) nám naznačuje, že se jedná o (zobecněné) obdoby funkcí sinus a kosinus. Jen pro úplnost se podívejme, jak vlastně vypadá průběh těchto dvou základních goniometrických funkcí při jejich vykreslení s postupnou změnou parametru x:

Obrázek 11: Průběh funkcí sin a cos.

Poznámka: vidíme, že obě funkce mají shodný průběh, pouze jsou vzájemně posunuty.

Prakticky stejným způsobem můžeme vykreslit průběh funkcí S(x) a C(x) do stejného grafu, a to s následujícím výsledkem:

Obrázek 12: Porovnání průběhů funkcí S(x) a C(x).

Poznámka: opět vidíme, že obě funkce jsou vzájemně posunuty, ovšem jejich průběh není (až na posun) stejný – tvar funkcí se nepatrně odlišuje.

Předchozí dva obrázky byly vykresleny touto dvojicí skriptů:

import numpy as np
import matplotlib.pyplot as plt
import math
 
# počet hodnot na x-ové ose
points = 300
 
# hodnoty na x-ové ose
x = np.linspace(0, 5, points)
 
 
# vektorizace předchozích funkcí
y_s = np.sin(x)
y_c = np.cos(x)
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('sin(x) a cos(x)', fontsize=15)
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y_s, 'r-')
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y_c, 'b-')
 
# uložení grafu do rastrového obrázku
plt.savefig("sin_cos.png")
 
# zobrazení grafu
plt.show()

a:

import numpy as np
import matplotlib.pyplot as plt
import math
 
# počet hodnot na x-ové ose
points = 300
 
# integrační krok
step = 0.001
 
# hodnoty na x-ové ose
x = np.linspace(0, 5, points)
 
 
# výpočet Fresnelova integrálu S(x)
def fresnel_s(x):
    result = 0
    for t in np.arange(0, x, step):
        result += math.sin(t**2)
    return result*step
 
 
# výpočet Fresnelova integrálu C(x)
def fresnel_c(x):
    result = 0
    for t in np.arange(0, x, step):
        result += math.cos(t**2)
    return result*step
 
 
# vektorizace předchozích funkcí
fresnel_s_v = np.vectorize(fresnel_s)
fresnel_c_v = np.vectorize(fresnel_c)
 
# aplikace vektorizovaných funkcí na všechny x-ové hodnoty
y_s = fresnel_s_v(x)
y_c = fresnel_c_v(x)
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Fresnelův integrál S(x) a C(x)', fontsize=15)
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y_s, 'r-')
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y_c, 'b-')
 
# uložení grafu do rastrového obrázku
plt.savefig("fresnel_c_s.png")
 
# zobrazení grafu
plt.show()

12. Vykreslení klotoidy s využitím funkcí S(x)C(x)

Připomeňme si, že klasickou kružnici lze popsat parametrickou křivkou ve tvaru:

x=cos(t)
y=sin(t)

Vykreslení takto definované křivky je s využitím kombinace Python+Numpy+Matplotlib triviální.

Jaká křivka se ovšem nakreslí, pokud namísto cos a sin použijeme funkce C a S, tedy Fresnelovy integrály?:

x=C(t)
y=S(t)

Odpověď již zajisté znáte – vznikne právě klotoida:

Obrázek 13: Klotoida.

Poznámka: zatímco u kružnice má smysl omezit rozsah parametru t na hodnoty mezi nulou a 2π, je tomu u klotoidy jinak, protože u této spirály má každý závit odlišný tvar (kdežto u kružnice jakožto triviální spirály se všechny závity přesně překrývají).

Předchozí křivka byla vykreslena tímto demonstračním příkladem:

import numpy as np
import matplotlib.pyplot as plt
import math
 
# počet hodnot na x-ové ose
points = 300
 
# integrační krok
step = 0.001
 
# hodnoty na x-ové ose
x = np.linspace(0, 5, points)
 
 
# výpočet Fresnelova integrálu S(x)
def fresnel_s(x):
    result = 0
    for t in np.arange(0, x, step):
        result += math.sin(t**2)
    return result*step
 
 
# výpočet Fresnelova integrálu C(x)
def fresnel_c(x):
    result = 0
    for t in np.arange(0, x, step):
        result += math.cos(t**2)
    return result*step
 
 
# vektorizace předchozích funkcí
fresnel_s_v = np.vectorize(fresnel_s)
fresnel_c_v = np.vectorize(fresnel_c)
 
# aplikace vektorizovaných funkcí na všechny x-ové hodnoty
y_s = fresnel_s_v(x)
y_c = fresnel_c_v(x)
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Fresnelův integrál S(x) a C(x)', fontsize=15)
 
# určení rozsahů na obou souřadných osách
ax.set_xlim(0, 1.2)
ax.set_ylim(0, 0.9)
 
# vrcholy na spirále
ax.plot(y_c, y_s, 'g-')
 
# uložení grafu do rastrového obrázku
plt.savefig("fresnel_spiral.png")
 
# zobrazení grafu
plt.show()

13. Obrazec s opakujícími se spirálami odvozený od Fresnelových integrálů

Na tomto místě uděláme malou odbočku od klasických spirál. Ukážeme si totiž skript, který vykreslí křivku (a to jedinou po částech spojitou křivku), která je obecně nekonečná a obsahuje opakující se spirály odvozené od Fresnelových integrálů. Výpočet je založen na následující iterační smyčce, v níž můžeme vidět, že se skutečně postupně numericky počítají hodnoty Fresnelových integrálů, ovšem přitom si zapamatujeme (a vykreslíme) i všechny mezivýsledky:

x = 0.0
y = 0.0
t = 0.0
 
for i in range(n):
    t += 0.05
    x += cos(t * t)
    y += sin(t * t)

V případě, že pro dostatečně velké n do grafu vykreslíme sekvenci bodů [xi, yi] (popř. tyto body spojíme úsečkou), získáme tento zvláštní obrazec:

Obrázek 14: Obrazec s opakujícími se spirálami odvozený od Fresnelových integrálů.

Poznámka: s rostoucí hodnotou n se do obrazce na „náhodnou“ pozici přidají další spirály. Můžete se taktéž pokusit o změnu kroku (v tomto konkrétním příkladu je nastaven na hodnotu 0.05).

Úplný zdrojový kód tohoto demonstračního příkladu vypadá následovně:

"""Fresnel fractal generator."""
 
import matplotlib.pyplot as plt
import numpy as np
from math import sin, cos
 
# Celkový počet vypočtených bodů
n = 10000
 
# Prozatím prázdná pole připravená pro uložení výsledků výpočtu.
xa = np.zeros((n,))
ya = np.zeros((n,))
 
 
x = 0.0
y = 0.0
t = 0.0
 
for i in range(n):
    t += 0.05
    x += cos(t * t)
    y += sin(t * t)
    xa[i] = x
    ya[i] = y
 
# vrcholy na křivce pospojované úsečkami
plt.plot(xa, ya, 'b')
 
# uložení grafu do rastrového obrázku
plt.savefig("fresnel.png")
 
# zobrazení grafu
plt.show()

14. Evolventy

Další skupinou křivek, s níž se v tomto seriálu setkáme, jsou evolventy (v angličtině se setkáme i s pojmenováním involute). Tyto křivky vznikají odvalováním polopřímky okolo nějakého tvaru, což je (pro kružnici jako základní tvar) naznačeno na této animaci. Koncový bod polopřímky při jejím postupném odvalování kreslí příslušnou evolventu. Typů evolvent pochopitelně existuje značné množství, protože jejich tvar je určen základním tvarem, okolo něhož se polopřímka odvaluje.

Mezi různými tvary evolvent je z praktického hlediska nejdůležitější evolventa, která vznikne odvalováním polopřímky po kružnici. Tvar této evolventy je určen pouze poloměrem kružnice. Evolventa začíná přímo na kružnici a odvalováním vzniká spirála (pól spirály je určen středem kružnice). Část této spirály je použita v evolventním ozubení, což je v současnosti naprosto nejpoužívanější typ ozubení v praxi. Díky takto upravenému tvaru zubů je přenášený točivý moment konstantní, čímž se zabraňuje vibracím a velkému hluku. Přenos síly v případě, že mají zuby (resp. jejich činná část) tvar evolventy, je ukázán na této animaci.

Poznámka na okraj (netýká se přímo evolvent): ještě lepších výsledků, tedy menšího hluku a vyšší účinnosti, lze dosáhnout současným použitím takzvaného šikmobokého ozubení (při pohledu shora na ozubené kolo vidíme zešikmení, činná část zubů je však stále evolventa). Ostatně každý si může hlučnost ozubených kol s přímobokým (klasickým) a šikmobokým ozubením ověřit sám – převodovka auta pro rychlosti dopředu používá šikmoboké ozubení (a není tedy prakticky slyšet), při couvání je však použito ozubení přímoboké. A každý zcela jistě zná specifický zvuk převodovky při couvání – ono známé „kňučení“.

15. Evolventa vzniklá odvalováním polopřímky po kružnici

Vraťme se však k evolventám z pohledu jejich vykreslování. Začneme tou nejpoužívanější evolventou vzniklou odvalováním polopřímky po kružnici. Trajektorii bodu tvořícího evolventu je možné v kartézské souřadné soustavě (nikoli tedy v soustavě polární, kterou jsme doposud používali) popsat těmito dvěma rovnicemi:

x = r*(cos(t) + t*sin(t))
y = r*(sin(t) – t*cos(t))

Poznámka: jedná se tedy o parametricky definovanou křivku, kde jediným nezávislým parametrem je t.

Evolventa pro kružnici je vypočtena a vykreslena následujícím skriptem:

"""Evolventa."""
 
import numpy as np
import matplotlib.pyplot as plt
 
# nezávislý parametr t
t = np.linspace(0.00, 3*np.pi, 100)
 
# koeficient evolventy
r = 10
 
# funkce evolventy
x = r*(np.cos(t) + t*np.sin(t))
y = r*(np.sin(t) - t*np.cos(t))
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Evolventa', fontsize=15)
 
# určení rozsahů na obou souřadných osách
ax.set_xlim(-100, 140)
ax.set_ylim(-80, 100)
 
# vrcholy na křivce pospojované úsečkami
ax.plot(x, y, 'g-')
 
# uložení grafu do rastrového obrázku
plt.savefig("involute1.png")
 
# zobrazení grafu
plt.show()

Výsledný obrázek s evolventou vykreslený tímto demonstračním příkladem vypadá následovně:

Obrázek 15: Evolventa vzniklá odvalováním polopřímky po kružnici.

16. Zakomponování kružnice, okolo níž se polopřímka odvaluje

Do obrázku je ovšem vhodné zakomponovat i kružnici, z níž je odvozen tvar evolventy. Předchozí zdrojový kód tedy nepatrně upravíme, a to tak, že do grafu vykreslíme dva průběhy souřadnic [x,y], přičemž jeden z průběhů představuje kružnici:

"""Evolventa."""
 
import numpy as np
import matplotlib.pyplot as plt
 
# nezávislý parametr t
t = np.linspace(0.00, 3*np.pi, 100)
 
# koeficient evolventy
r = 10
 
# funkce kružnice
xc = r*np.cos(t)
yc = r*np.sin(t)
 
# funkce evolventy
xe = r*(np.cos(t) + t*np.sin(t))
ye = r*(np.sin(t) - t*np.cos(t))
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Evolventa', fontsize=15)
 
# určení rozsahů na obou souřadných osách
ax.set_xlim(-100, 140)
ax.set_ylim(-80, 100)
 
# vrcholy na kružnici
ax.plot(xc, yc, 'r-')
 
# vrcholy na křivce pospojované úsečkami
ax.plot(xe, ye, 'g-')
 
# uložení grafu do rastrového obrázku
plt.savefig("involute2.png")
 
# zobrazení grafu
plt.show()

Výsledek nyní bude vypadat takto:

Obrázek 16: Evolventa i s kružnicí, která určuje její počátek i tvar.

Poznámka: ve skutečnosti je kružnice nakreslena několikrát, a to kvůli zvolenému rozsahu hodnot parametru t
(aby se ukázalo několik závitů evolventy). Případnou úpravu – tedy pravděpodobně použití dvou parametrů t1 a t2 ponechám na laskavém čtenáři.

17. Přidání koeficientu a do rovnice evolventy

Jak jsme se již řekli v předchozím textu, je tvar evolventy určen jediným koeficientem, a tím je poloměr kružnice r, po níž se odvaluje polopřímka. Ovšem začátek evolventy je taktéž modifikovatelný, a to po nepatrném zobecnění předchozích rovnic do podoby:

x = r*(cos(t) + (t-a)*sin(t))
y = r*(sin(t) – (t-a)*cos(t))

Následující skript vznikl zobecněním skriptu předchozího. Umožňuje volbu koeficientu a, jímž je specifikován počátek evolventy (na kružnici) a tím pádem i její natočení:

"""Evolventa."""
 
import numpy as np
import matplotlib.pyplot as plt
 
# nezávislý parametr t
t = np.linspace(0.00, 3*np.pi, 100)
 
# koeficient evolventy
r = 10
 
# funkce kružnice
xc = r*np.cos(t)
yc = r*np.sin(t)
 
 
def draw_evolvent(ax, a, style):
    # funkce evolventy
    xe = r*(np.cos(t) + (t-a)*np.sin(t))
    ye = r*(np.sin(t) - (t-a)*np.cos(t))
 
    # vrcholy na křivce pospojované úsečkami
    ax.plot(xe, ye, style)
 
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Evolventa', fontsize=15)
 
# určení rozsahů na obou souřadných osách
ax.set_xlim(-100, 140)
ax.set_ylim(-80, 100)
 
# vrcholy na kružnici
ax.plot(xc, yc, 'r-')
 
# vykreslení několika evolvent, pokaždé s jiným koeficientem a
draw_evolvent(ax, -0.5, 'g-')
draw_evolvent(ax, 0, 'm-')
draw_evolvent(ax, 0.5, 'c-')
 
# uložení grafu do rastrového obrázku
plt.savefig("involute3.png")
 
# zobrazení grafu
plt.show()

Výsledný obrázek s několika evolventami vykreslený tímto demonstračním příkladem bude vypadat následovně:

Obrázek 17: Vliv koeficientu a na tvar a otočení evolventy.

18. Evolventa vznikající odvalováním polopřímky po cykloidě

Víme již, že evolventa může vzniknout odvalováním po (prakticky) libovolném tvaru. Nemusí se tedy v žádném případě jednat pouze o kružnici. Podívejme se tedy nyní, jak budou vypadat rovnice popisující evolventu vzniknou odvalováním polopřímky po cykloidě (přičemž samotná cykloida vzniká odvalováním kružnice po přímce):

x = t + sin(t)
y = 3 + cos(t)

Pochopitelně si můžeme tuto evolventu nechat nakreslit, a to včetně cykloidy, která určuje její tvar:

"""Evolventa cykloidy."""
 
import numpy as np
import matplotlib.pyplot as plt
 
# nezávislý parametr t
t = np.linspace(0.00, 2*np.pi, 100)
 
# funkce cykloidy
xc = t-np.sin(t)
yc = 1-np.cos(t)
 
# funkce evolventy
xe = t + np.sin(t)
ye = 3 + np.cos(t)
 
# rozměry grafu při uložení: 640x480 pixelů
fig, ax = plt.subplots(1, figsize=(6.4, 4.8))
 
# titulek grafu
fig.suptitle('Evolventa cykloidy', fontsize=15)
 
# vrcholy na cykloidě
ax.plot(xc, yc, 'r-')
 
# vrcholy na křivce pospojované úsečkami
ax.plot(xe, ye, 'g-')
 
# uložení grafu do rastrového obrázku
plt.savefig("involute4.png")
 
# zobrazení grafu
plt.show()

Z obrázku, který je vykreslen tímto demonstračním příkladem, je patrný jak výchozí bod evolventy, tak i to, že odvalování může probíhat v obou směrech:

bitcoin_skoleni

Obrázek 18: Evolventa, která vznikla odvalováním polopřímky po cykloidě.

Poznámka: asi není nutné zmiňovat, že tato evolventa již není spirálou.

19. Repositář s demonstračními příklady

Všechny dříve i dnes popisované demonstrační příklady určené pro Python 3 a knihovnu Matplotlib byly uloženy do Git repositáře, který je dostupný na adrese https://github.com/tisnik/pre­sentations. Příklady si můžete v případě potřeby stáhnout i jednotlivě bez nutnosti klonovat celý (dnes již poměrně rozsáhlý) repositář:

# Příklad Popis Adresa
1 line.py úsečka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/line.py
2 parabola.py parabola https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parabola.py
3 hyperbola.py hyperbola https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hyperbola.py
4 ellipse_parametric.py parametricky zadaná elipsa https://github.com/tisnik/pre­sentations/blob/master/cur­ves/ellipse_parametric.py
5 ellipse_general.py obecná elipsa https://github.com/tisnik/pre­sentations/blob/master/cur­ves/ellipse_general.py
6 circle_parametric.py parametricky zadaná kružnice https://github.com/tisnik/pre­sentations/blob/master/cur­ves/circle_parametric.py
7 circle_polar.py polární souřadnice při kreslení kružnice https://github.com/tisnik/pre­sentations/blob/master/cur­ves/circle_polar.py
8 archimedes_spiral.py Archimédova spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/archimedes_spiral.py
9 fermats_spiral.py Fermatova spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/fermats_spiral.py
10 hyperbolic_spiral.py Hyperbolická spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hyperbolic_spiral.py
11 logarithmic_spiral.py Logaritmická spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/logarithmic_spiral.py
12 parabola_catenary1.py parabola vs. řetězovka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parabola_catenary1.py
13 parabola_catenary2.py parabola vs. řetězovka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parabola_catenary2.py
14 cardioid.py srdcovka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/cardioid.py
15 catenary.py řetězovka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/catenary.py
17 fresnel.py Fresnelův integrál https://github.com/tisnik/pre­sentations/blob/master/cur­ves/fresnel.py
19 lissajous.py Lissajousův obrazec https://github.com/tisnik/pre­sentations/blob/master/cur­ves/lissajous.py
       
20 superellipse1.py superelipsa https://github.com/tisnik/pre­sentations/blob/master/cur­ves/superellipse1.py
21 superellipse2.py superelipsa, ovšem s odlišnými parametry https://github.com/tisnik/pre­sentations/blob/master/cur­ves/superellipse2.py
22 cycloid.py cykloida https://github.com/tisnik/pre­sentations/blob/master/cur­ves/cycloid.py
23 epicycloid1.py epicykloida https://github.com/tisnik/pre­sentations/blob/master/cur­ves/epicycloid1.py
24 epicycloid2.py epicykloida, ovšem s odlišnými parametry https://github.com/tisnik/pre­sentations/blob/master/cur­ves/epicycloid2.py
25 hypocycloid1.py hypocykloida https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hypocycloid1.py
26 hypocycloid2.py hypocykloida, ovšem s odlišnými parametry https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hypocycloid2.py
27 hypotrochoid1.py hypotrochoida https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hypotrochoid1.py
28 hypotrochoid2.py hypotrochoida, ovšem s odlišnými parametry https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hypotrochoid2.py
29 hypotrochoid3.py hypotrochoida, ovšem s odlišnými parametry https://github.com/tisnik/pre­sentations/blob/master/cur­ves/hypotrochoid3.py
30 implicit/implicit.py křivka zadaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/implicit.py
       
31 3d_plot/parabola1A.py funkce pro parabolu ve 3D https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/parabola1A.py
32 3d_plot/parabola1B.py funkce pro parabolu ve 3D + kontury https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/parabola1B.py
33 3d_plot/parabola2A.py funkce pro parabolu ve 3D https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/parabola2A.py
34 3d_plot/parabola2B.py funkce pro parabolu ve 3D + kontury https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/parabola2B.py
35 3d_plot/hyperbolaA.py funkce pro hyperbolu ve 3D https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/hyperbolaA.py
36 3d_plot/hyperbolaB.py funkce pro hyperbolu ve 3D + kontury https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/hyperbolaB.py
37 3d_plot/sin_cos1.py goniometrická funkce ve 3D https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/sin_cos1.py
38 3d_plot/sin_cos2.py goniometrická funkce ve 3D https://github.com/tisnik/pre­sentations/blob/master/cur­ves/3d_plot/sin_cos2.py
39 anim/cassini_anim.py animace změny koeficientů Cassiniho oválu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/anim/cassini_anim.py
40 anim/spiric_anim.py animace změny koeficientů průsečíku roviny s toroidem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/anim/spiric_anim.py
41 implicit/cassini1.py Cassiniho ovál https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/cassini1.py
42 implicit/cassini2.py Cassiniho ovál https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/cassini2.py
43 implicit/cassini3.py Cassiniho ovál https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/cassini3.py
44 implicit/cassini4.py Cassiniho ovál https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/cassini4.py
45 implicit/circle1.py kružnice specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/circle1.py
46 implicit/circle2.py kružnice specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/circle2.py
47 implicit/ellipse1.py elipsa specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/ellipse1.py
48 implicit/ellipse2.py elipsa specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/ellipse2.py
49 implicit/ellipse3.py elipsa specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/ellipse3.py
50 implicit/elliptic1.py eliptická křivka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/elliptic1.py
51 implicit/elliptic2.py mřížka několika eliptických křivek https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/elliptic2.py
52 implicit/flower.py křivka připomínající květ https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/flower.py
53 implicit/hyperbola1.py hyperbola specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/hyperbola1.py
54 implicit/hyperbola2.py hyperbola specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/hyperbola2.py
55 implicit/line1.py přímka specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/line1.py
56 implicit/line2.py přímka specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/line2.py
57 implicit/parabola1.py parabola specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/parabola1.py
58 implicit/parabola2.py parabola specifikovaná implicitní funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/parabola2.py
59 implicit/sin_cos1.py implicitní funkce obsahující goniometrické funkce https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/sin_cos1.py
60 implicit/sin_cos2.py implicitní funkce obsahující goniometrické funkce https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/sin_cos2.py
61 implicit/spiric1.py řez toroidu plochou https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/spiric1.py
62 implicit/spiric2.py řez toroidu plochou https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/spiric2.py
63 implicit/spiric3.py řez toroidu plochou https://github.com/tisnik/pre­sentations/blob/master/cur­ves/implicit/spiric3.py
       
64 interpolation/lagrange_in­terpolation1.py interpolace Lagrangeovým polynomem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/interpolation/lagrange_in­terpolation1.py
65 interpolation/lagrange_in­terpolation2.py interpolace Lagrangeovým polynomem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/interpolation/lagrange_in­terpolation2.py
66 interpolation/lagrange_poly1.py konstrukce Lagrangeova polynomu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/interpolation/lagrange_po­ly1.py
67 interpolation/lagrange_poly2.py konstrukce Lagrangeova polynomu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/interpolation/lagrange_po­ly2.py
68 approximation/linear_regression1.py lineární regrese https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/linear_re­gression1.py
68 approximation/linear_regression2.py lineární regrese https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/linear_re­gression2.py
69 approximation/linear_regression3.py lineární regrese https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/linear_re­gression3.py
70 approximation/poly_regression1.py aproximace polynomem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/poly_re­gression1.py
71 approximation/poly_regression2.py aproximace polynomem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/poly_re­gression2.py
72 approximation/random_data_linear.py náhodná data pro lineární regresi https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/random_da­ta_linear.py
73 approximation/random_data_poly.py náhodná data pro aproximaci polynomem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/random_da­ta_poly.py
74 approximation/taylor_sin1.py aproximace funkce sin Taylorovým rozvojem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/taylor_sin.py
75 approximation/taylor_sin2.py aproximace funkce sin Taylorovým rozvojem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/taylor_sin.py
76 approximation/taylor_sin5.py aproximace funkce sin Taylorovým rozvojem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/taylor_sin.py
77 approximation/taylor_sin9.py aproximace funkce sin Taylorovým rozvojem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/taylor_sin.py
78 approximation/taylor_sin_x.py aproximace funkce sin Taylorovým rozvojem https://github.com/tisnik/pre­sentations/blob/master/cur­ves/approximation/taylor_sin_x­.py
79 parametric/circle.py parametricky zadaná kružnice https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/circle.py
80 parametric/Bezier_basis.py Bernsteinovy polynomy https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_basis­.py
81 parametric/Bezier_cubic.py Bézierova kubika https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_cubic­.py
82 parametric/Bezier_kvadric.py Bézierova kvadrika https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_kva­dric.py
83 parametric/B-spline-1.py B-spline křivka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/B-spline-1.py
84 parametric/B-spline-2.py B-spline křivka s násobnými body https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/B-spline-2.py
85 parametric/Coons_basis.py Coonsovy bázové polynomy https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Coons_basis­.py
86 parametric/Coons.py Coonsova křivka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Coons.py
       
87 parametric/Bezier_cubic_basis.py bázové vektory Bézierovy kubiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_cubic_ba­sis.py
88 parametric/Bezier_cubic_basis_sum.py součet bázových vektorů Bézierovy kubiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_cubic_ba­sis_sum.py
89 parametric/Bezier_quadric_basis.py bázové vektory Bézierovy kvadriky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_qua­dric_basis.py
90 parametric/Bezier_quadric_basis_sum.py součet bázových vektorů Bézierovy kvadriky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_qua­dric_basis_sum.py
91 parametric/Bezier_quartic_basis.py bázové vektory Bézierovy quartiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_quar­tic_basis.py
92 parametric/Bezier_quartic_basis_sum.py součet bázových vektorů Bézierovy kvartiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_quar­tic_basis_sum.py
93 parametric/Bezier_quintic_basis.py bázové vektory Bézierovy quintiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_quin­tic_basis.py
94 parametric/Bezier_quintic_basis_sum.py součet bázových vektorů Bézierovy quintiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Bezier_quin­tic_basis_sum.py
95 parametric/Catmul-Rom_basis.py bázové vektory Catmul-Romovy spline https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_basis.py
96 parametric/Catmul-Rom_basis_sum.py součet bázových vektorů Catmul-Romovy spline https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_basis_sum.py
97 parametric/Catmul-Rom_cubic.py Catmul-Romova kubika https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_cubic.py
98 parametric/Catmul-Rom_spline_A.py Catmul-Romova spline https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_spline_A.py
99 parametric/Catmul-Rom_spline_B.py Catmul-Romova spline procházející koncovými body https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_spline_B.py
100 parametric/Coons_basis2.py bázové vektory Coonsovy kubiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Coons_basis.py
101 parametric/Coons_basis_sum.py součet bázových vektorů Coonsovy kubiky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Coons_basis_sum­.py
102 parametric/linear_basis.py bázové vektory lineární interpolace https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/linear_basis­.py
103 parametric/linear_basis_sum.py součet bázových vektorů lineární interpolace https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/linear_basis_sum­.py
104 parametric/linear_interpolation.py zobrazení lineární interpolace https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/linear_inter­polation.py
       
105 parametric/B-spline-3.py B-spline křivka se čtyřmi segmenty, u níž se mění pozice prostředního řídicího bodu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/B-spline-3.py
106 parametric/Catmul-Rom_spline_C.py Catmul-Romova spline, u níž se mění pozice prostředního řídicího bodu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_spline_C.py
107 anim/B-spline-anim.py B-spline křivka se čtyřmi segmenty, u níž se postupně mění pozice prostředního řídicího bodu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/anim/B-spline-anim.py
108 anim/Catmul-Rom_spline-anim.py Catmul-Romova spline křivka se čtyřmi segmenty, u níž se postupně mění pozice prostředního řídicího bodu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/anim/Catmul-Rom_spline-anim.py
109 parametric/B-spline-4.py Parametrická křivka: B-spline složená z Coonsových oblouků, násobné body na začátku a konci https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/B-spline-4.py
110 parametric/Catmul-Rom_spline_D.py Parametrická křivka: Catmul-Romova spline, násobné body na začátku a na konci https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_spline_D.py
111 parametric/B-spline-5.py Parametrická křivka: B-spline složená z Coonsových oblouků, násobné body uprostřed křivky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/B-spline-5.py
112 parametric/Catmul-Rom_spline_E.py Parametrická křivka: Catmul-Romova spline, násobné body uprostřed křivky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Catmul-Rom_spline_E.py
113 parametric/Hermite_basis.py bázové polynomy Hermitovy křivky https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Hermite_ba­sis.py
114 parametric/Hermite_spline.py Hermitova křivka https://github.com/tisnik/pre­sentations/blob/master/cur­ves/parametric/Hermite_spli­ne.py
       
115 spirals/trivial_spiral.py triviální spirála – kružnice https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/trivial_spiral­.py
116 spirals/archimedean_spiral.py Archimédova spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/archimedean_spi­ral.py
117 spirals/fermat_spiral.py Fermatova spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/fermat_spiral­.py
118 spirals/hyperbolic_spiral.py Hyperbolická spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/hyperbolic_spi­ral.py
119 spirals/hyperbolic_spiral2.py Hyperbolická spirála se dvěma rameny https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/hyperbolic_spi­ral2.py
120 spirals/logarithmic_spiral.py Logaritmická spirála https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/logarithmic_spi­ral.py
121 spirals/atomic_spiral1.py Atomická spirála, první verze https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/atomic_spiral.py
122 spirals/atomic_spiral2.py Atomická spirála, korektní verze verze https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/atomic_spiral.py
123 spirals/lituus.py Lituus https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/lituus.py
124 spirals/ifs.py Vykreslení různých systémů iterovaných funkcí https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/ifs.py
125 spirals/mandelbrot_matplotlib.py Vykreslení Mandelbrotovy množiny, postaveno na knihovně Matplotlib https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/mandelbrot_mat­plotlib.py
126 spirals/mandelbrot_pil.py Vykreslení Mandelbrotovy množiny, postaveno na knihovně PIL/Pillow https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/mandelbrot_pil­.py
127 spirals/mandelbrot_spirals.py Spirály nalezené v Mandelbrotově množině https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/mandelbrot_spi­rals.py
128 spirals/julia_spirals.py Spirály nalezené v Juliových množinách https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/julia_spirals­.py
129 spirals/palette_blues.py Barvová paleta, kterou je možné použít v předchozích třech příkladech https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/palette_blues­.py
130 spirals/palette_greens.py Barvová paleta, kterou je možné použít v předchozích třech příkladech https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/palette_green­s.py
131 spirals/palette_mandmap.py Barvová paleta, kterou je možné použít v předchozích třech příkladech https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/palette_mandmap­.py
       
132 spirals/fresnel_integral_s.py Fresnelův integrál S(x) https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/fresnel_integral_s­.py
133 spirals/fresnel_integral_c.py Fresnelův integrál C(x) https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/fresnel_integral_c­.py
134 spirals/fresnel_integral_c_s.py Průběhy Fresnelových integrálů S(x) i C(x) https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/fresnel_integral_c_s­.py
135 spirals/fresnel_spiral.py Fresnelova/Cornuova spirála neboli klotoida https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/fresnel_spiral­.py
136 spirals/involute1.py Základní evolventa (založená na kružnici) https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/involute1.py
137 spirals/involute2.py Přidání kružnice do grafu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/involute2.py
138 spirals/involute3.py Vliv koeficientu a na tvar evolventy https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/involute3.py
139 spirals/involute4.py Evolventa pro cykloidu https://github.com/tisnik/pre­sentations/blob/master/cur­ves/spirals/involute4.py

20. Odkazy na Internetu

  1. The spiral: the eternal sign of the creative and organising principle at work in the universe
    https://geoffjward.medium.com/the-spiral-the-eternal-sign-of-the-creative-and-organising-principle-at-work-in-the-universe-8889ba092300
  2. Speira(Spiral): one of the oldest and most powerful symbols in the world
    https://www.greecehighdefi­nition.com/blog/speira-spiral-oldest-greek-symbols-in-the-world-ancient-greece
  3. Spirals
    https://web.stanford.edu/~si­egelr/photography/spirals­.html
  4. Why Do Spirals Exist Everywhere in Nature?
    https://www.samwoolfe.com/2014/05/spi­rals-everywhere.html
  5. Patterns In Nature: Where to Spot Spirals
    https://www.scienceworld.ca/sto­ries/patterns-nature-where-spot-spirals/
  6. Spirals in Nature
    https://extension.illinois­.edu/blogs/naturalist-news/2021–06–23-spirals-nature
  7. The Curves of Life (Dover Books Explaining Science)
    https://www.amazon.com/Curves-Dover-Books-Explaining-Science/dp/048623701X
  8. Famous Curves Index
    https://mathshistory.st-andrews.ac.uk/Curves/
  9. Curve (Wikipedia)
    https://en.wikipedia.org/wiki/Curve
  10. Mathematical curves
    https://www.2dcurves.com/index.html
  11. Curves (Wolfram MathWorld)
    https://mathworld.wolfram­.com/topics/Curves.html
  12. Smooth Curve (Wolfram MathWorld)
    https://mathworld.wolfram­.com/SmoothCurve.html
  13. Spirals (Wolfram MathWorld)
    https://mathworld.wolfram­.com/topics/Spirals.html
  14. An Interactive Introduction to Splines
    https://ibiblio.org/e-notes/Splines/Intro.htm
  15. Parabola
    https://www.2dcurves.com/co­nicsection/conicsectionp.html
  16. Hyperbola
    https://www.2dcurves.com/co­nicsection/conicsectionh.html
  17. Dioklova kisoida
    https://cs.wikipedia.org/wi­ki/Dioklova_kisoida
  18. Archimédova spirála
    https://cs.wikipedia.org/wi­ki/Archim%C3%A9dova_spir%C3%A1la
  19. Conchoid (mathematics)
    https://en.wikipedia.org/wi­ki/Conchoid_(mathematics)
  20. Algebraic curve
    https://en.wikipedia.org/wi­ki/Algebraic_curve
  21. Transcendental curve
    https://en.wikipedia.org/wi­ki/Transcendental_curve
  22. Spiral
    https://en.wikipedia.org/wiki/Spiral
  23. List of spirals
    https://en.wikipedia.org/wi­ki/List_of_spirals
  24. Hyperbolická spirála
    https://cs.wikipedia.org/wi­ki/Hyperbolick%C3%A1_spir%C3%A1la
  25. Hyperbolic Spiral
    https://mathworld.wolfram­.com/HyperbolicSpiral.html
  26. Lituus (mathematics)
    https://en.wikipedia.org/wi­ki/Lituus_(mathematics)
  27. Spiral of Spirals Fractals 2 with Python Turtle (Source Code)
    https://pythonturtle.academy/spiral-of-spirals-fractals-2-with-python-turtle-source-code/
  28. Cornu Spiral
    http://hyperphysics.gsu.e­du/hbase/phyopt/cornu.html
  29. Spiral
    https://www.2dcurves.com/spi­ral/spiral.html
  30. Cornu’s spiral
    https://www.johndcook.com/blog/2016/03/23/cor­nus-spiral/
  31. Cornu Spiral
    https://mathworld.wolfram­.com/CornuSpiral.html
  32. Fresnel Integrals
    https://mathworld.wolfram­.com/FresnelIntegrals.html
  33. Fresnel integral
    https://en.wikipedia.org/wi­ki/Fresnel_integral
  34. Algebraic Curves
    https://mathworld.wolfram­.com/topics/AlgebraicCurves­.html
  35. Elliptic Curves
    https://mathworld.wolfram­.com/topics/EllipticCurves­.html
  36. Eukleidovská konstrukce
    https://cs.wikipedia.org/wi­ki/Eukleidovsk%C3%A1_konstruk­ce
  37. Euclidean Constructions
    http://www.cs.cas.cz/portal/Al­goMath/Geometry/PlaneGeome­try/GeometricConstruction­s/EuclideanConstructions.htm
  38. Kvadratura kruhu
    https://cs.wikipedia.org/wi­ki/Kvadratura_kruhu
  39. Trisekce úhlu
    https://cs.wikipedia.org/wi­ki/Trisekce_%C3%BAhlu
  40. Straightedge and compass construction
    https://en.wikipedia.org/wi­ki/Straightedge_and_compas­s_construction
  41. C.a.R.
    http://car.rene-grothmann.de/doc_en/index.html
  42. CaRMetal (Wikipedia)
    https://en.wikipedia.org/wiki/C.a.R.
  43. CaRMetal (Španělsky a Francouzsky)
    http://carmetal.org/index.php/fr/
  44. CaRMetal (Wikipedia)
    https://en.wikipedia.org/wi­ki/CaRMetal
  45. Regular Polygon
    http://mathforum.org/dr.mat­h/faq/formulas/faq.regpoly­.html
  46. Geometric Construction with the Compass Alone
    http://www.cut-the-knot.org/do_you_know/compass.shtml
  47. Kvadratura kruhu (Wikipedie)
    https://cs.wikipedia.org/wi­ki/Kvadratura_kruhu
  48. Compass equivalence theorem
    https://en.wikipedia.org/wi­ki/Compass_equivalence_the­orem
  49. Curves we (mostly) don't learn in high school (and applications)
    https://www.youtube.com/wat­ch?v=3izFMB91K_Q
  50. Can You Really Derive Conic Formulae from a Cone? – Menaechmus' Constructions
    https://www.maa.org/press/pe­riodicals/convergence/can-you-really-derive-conic-formulae-from-a-cone-menaechmus-constructions
  51. Apollonius of Perga
    https://en.wikipedia.org/wi­ki/Apollonius_of_Perga
  52. Catenary arch
    https://en.wikipedia.org/wi­ki/Catenary_arch
  53. Parabolic arch
    https://en.wikipedia.org/wi­ki/Parabolic_arch
  54. Wattova křivka
    https://www.geogebra.org/m/gNh4bW9r
  55. Model stegosaura byl získán na stránce
    http://www.turbosquid.com/HTMLCli­ent/FullPreview/Index.cfm/ID/171071/Ac­tion/FullPreview
  56. Obrázek nohy dinosaura byl získán na adrese
    http://perso.wanadoo.fr/ri­masson/3d/leg.htm
  57. Spirograph
    https://en.wikipedia.org/wi­ki/Spirograph
  58. Epicykloida
    https://cs.wikipedia.org/wi­ki/Epicykloida
  59. Hypocykloida
    https://cs.wikipedia.org/wi­ki/Hypocykloida
  60. Hypotrochoida
    https://cs.wikipedia.org/wi­ki/Hypotrochoida
  61. Superelipsoidy a kvadriky v POV-Rayi
    https://www.root.cz/clanky/su­perelipsoidy-a-kvadriky-v-pov-rayi/
  62. Fifty Famous Curves, Lots of Calculus Questions, And a Few Answers
    https://elepa.files.wordpres­s.com/2013/11/fifty-famous-curves.pdf
  63. Barr, A.H.: Superquadrics and Angle Preserving Transformations,
    IEEE Computer Graphics and Applications, January 1981
  64. Bourke Paul: Quadrics,
    July 1996
  65. Bourke Paul: Superellipse and Superellipsoid,
    January 1990
  66. Faux, I.D. a Pratt, M.J.: Computational Geometry for Design and Manufacture,
    Ellis Horwood Ltd., Wiley & Sons, 1979
  67. Wallace A.: Differential Topology,
    Benjamin/Cummings Co., Reading, Massachussetts, USA, 1968
  68. Glossary of Bridge Terminology
    http://sdrc.lib.uiowa.edu/en­g/bridges/WaddellGlossary/Glos­sC.htm
  69. Brachistochrona
    https://cs.wikipedia.org/wi­ki/Brachistochrona
  70. Missions: Cassini
    https://solarsystem.nasa.gov/mis­sions/cassini/overview/
  71. Giovanni Domenico Cassini
    https://en.wikipedia.org/wi­ki/Giovanni_Domenico_Cassi­ni
  72. Cassini Ovals
    https://mathworld.wolfram­.com/CassiniOvals.html
  73. Geocentrismus
    https://cs.wikipedia.org/wi­ki/Geocentrismus
  74. Who was Giovanni Cassini?
    https://www.universetoday­.com/130823/who-was-giovanni-cassini/
  75. Special plane curves
    http://xahlee.info/Special­PlaneCurves_dir/ConicSecti­ons_dir/conicSections.html
  76. Why Does Slicing a Cone Give an Ellipse?
    https://infinityisreallybig­.com/2019/02/08/why-does-slicing-a-cone-give-an-ellipse/
  77. Interpolace
    https://mathonline.fme.vut­br.cz/pg/Algoritmy/05_APROX_KRIV­KY.htm
  78. Lagrange Polynomial Interpolation
    https://pythonnumericalmet­hods.berkeley.edu/notebook­s/chapter17.04-Lagrange-Polynomial-Interpolation.html
  79. Python Program for Lagrange Interpolation Method (with Output)
    https://www.codesansar.com/numerical-methods/python-program-lagrange-interpolation-method.htm
  80. Smooth Paths Using Catmull-Rom Splines
    https://qroph.github.io/2018/07/30/smo­oth-paths-using-catmull-rom-splines.html
  81. Lecture 11: Linear Interpolation Again – Bézier Curves
    http://www.math.kent.edu/~re­ichel/courses/intr.num.com­p.1/fall09/lecture12/bez.pdf
  82. Geometrie/Úvod do křivek
    https://cs.wikibooks.org/wi­ki/Geometrie/%C3%9Avod_do_k%C5%99i­vek
  83. B-Spline Curves and Surfaces (1)
    http://www.cad.zju.edu.cn/ho­me/zhx/GM/006/00-bscs1.pdf
  84. Praktické ukázky možností aplikace Mandelbulber při tvorbě animací
    https://www.root.cz/clanky/prakticke-ukazky-moznosti-aplikace-mandelbulber-pri-tvorbe-animaci/
  85. Kochanek–Bartels spline
    https://en.wikipedia.org/wi­ki/Kochanek%E2%80%93Bartel­s_spline
  86. class KochanekBartels
    https://splines.readthedoc­s.io/en/latest/_modules/spli­nes.html#KochanekBartels
  87. Fraktály v počítačové grafice XVIII
    https://www.root.cz/clanky/fraktaly-v-pocitacove-grafice-xviii/
  88. Fraktály v počítačové grafice XVI
    https://www.root.cz/clanky/fraktaly-v-pocitacove-grafice-xvi/
  89. Fraktály v počítačové grafice IV
    https://www.root.cz/clanky/fraktaly-v-pocitacove-grafice-iv/
  90. Systémy iterovaných funkcí a algoritmus náhodné procházky
    https://www.root.cz/clanky/systemy-iterovanych-funkci-a-algoritmus-nahodne-prochazky/
  91. Pravděpodobnosti transformací v systémech iterovaných funkcí
    https://www.root.cz/clanky/prav­depodobnosti-transformaci-v-systemech-iterovanych-funkci/
  92. Marie Alfred Cornu
    https://en.wikipedia.org/wi­ki/Marie_Alfred_Cornu
  93. Přechodnice
    https://cs.wikipedia.org/wi­ki/P%C5%99echodnice
  94. Evolventa
    https://cs.wikipedia.org/wi­ki/Evolventa
  95. Polopřímka
    https://cs.wikipedia.org/wi­ki/Polop%C5%99%C3%ADmka
  96. Involute (anglické označení pro evolventu)
    https://en.wikipedia.org/wi­ki/Involute
  97. Evolventní ozubení
    https://cs.wikipedia.org/wi­ki/Evolventn%C3%AD_ozuben%C3%AD

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.