OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:11-rasterizace:main [2016/05/26 13:12] xpavel27 [Vykreslení po bodech] |
temata:11-rasterizace:main [2016/05/27 11:41] (aktuální) xpavel27 [Bresenhamův algoritmus] |
||
---|---|---|---|
Řádek 84: | Řádek 84: | ||
Používá celočíselnou aritmetiku, sčítání, porovnání\\ | Používá celočíselnou aritmetiku, sčítání, porovnání\\ | ||
Posun v ose Y podle znaménka **prediktoru**\\ \\ | Posun v ose Y podle znaménka **prediktoru**\\ \\ | ||
- | * Pokud <m>E_i + k \ge 0.5</m>, potom <m>E_{i + 1} = E_i + k</m>\\ | + | * Pokud <m>E_i + k \ge 0.5</m>, potom <m>E_{i + 1} = E_i + k - 1</m>\\ |
- | * Pokud <m>E_i + k < 0.5</m> potom <m>E_{i + 1} = E_i + k - 1</m>\\ | + | * Pokud <m>E_i + k < 0.5</m> potom <m>E_{i + 1} = E_i + k</m>\\ |
Takze po vynásobení rovnic <m>2\Delta x</m>: | Takze po vynásobení rovnic <m>2\Delta x</m>: | ||
Řádek 148: | Řádek 148: | ||
<box left round blue 90%|**Popis**> | <box left round blue 90%|**Popis**> | ||
- | * varianta DDA pro kružnici-floating point, nízka efektivita, vysoká náročnost implementace v HW | ||
- | * rekurentní posun o konstaní přírůstek úhlu(sin a cos se počítají pouze jednou) | ||
- | |<m>x_{n + 1} = x_n \cos\alpha − y_n \sin\alpha</m>| | + | * **Info** |
+ | * varianta DDA pro kružnici-floating point | ||
+ | * aplikace rotacní transformace bodu. | ||
+ | * používá "floating-point aritmetiku". | ||
+ | * nízká efektivita, nárocná implementace do HW. | ||
+ | * rekurentní posun o konstaní přírůstek úhlu | ||
+ | * funkce sin a cos jsou vypocítány pouze jednou! | ||
+ | * souradnice X a Y se zaokrouhlují na nejbližší celé císlo. | ||
+ | * vypoctené souˇradnice spojujeme úseckami. | ||
- | |<m>y_{n + 1} = x_n \sin\alpha − y_n \cos\alpha</m>| | + | * **Vzorce** |
- | </box> | + | * <m>x_{n + 1} = x_n \cos\alpha − y_n \sin\alpha</m> |
+ | * <m>y_{n + 1} = x_n \sin\alpha − y_n \cos\alpha</m> | ||
+ | * **V podstate** | ||
+ | * Vypočítame cos jedného uhla <m>\cos (2\pi / N)</m> | ||
+ | * Vypočítame sin jedného uhla <m>\sin (2\pi / N)</m> | ||
+ | * Začneme na súradnici R,0 | ||
+ | * Pre každý uhol vypočítame nové x a y podľa vzorca | ||
+ | |||
+ | {{ temata:11-rasterizace:kruhuholnik.png?500 }} | ||
+ | </box> | ||
==== Midpoint algoritmus ==== | ==== Midpoint algoritmus ==== | ||
<box left round blue 90%|**Popis**> | <box left round blue 90%|**Popis**> | ||
- | * variace na Bresenhamův =>celočíselná aritmetika, vysoká efektivita, snadná implementace | + | * variace na Bresenhamův |
+ | * celočíselná aritmetika | ||
+ | * vysoká efektivita | ||
+ | * snadná implementace | ||
* po pixelu od [0,R] dokud <m>x = y</m> | * po pixelu od [0,R] dokud <m>x = y</m> | ||
+ | * startovací hodnota je <m>p_i = 1 − R</m> | ||
|<m>p_i = (x_i + 1)^2 + (y_i − 1/2)^2 − R^2</m>| | |<m>p_i = (x_i + 1)^2 + (y_i − 1/2)^2 − R^2</m>| | ||
- | |||
|<m>p_i < 0 \doubleright y_{i + 1} = y_i, p_{i+1} = p_i + 2x_i + 3</m>| | |<m>p_i < 0 \doubleright y_{i + 1} = y_i, p_{i+1} = p_i + 2x_i + 3</m>| | ||
+ | |<m>p_i \ge 0 \doubleright y_{i + 1} = y_i - 1, p_i + 1 = p_i + 2x_i − 2y_i + 5</m>| | ||
- | |<m>p_i \ge 0 \doubleright y_{i + 1} = y_i - 1, p_i + 1 = p_i + 2x_i − 2y_i + 5</m>| | + | {{ temata:11-rasterizace:basenkruh.png?500 }} |
- | * startovací hodnota je <m>p_i = 1 − R</m> | ||
- | <code> | ||
- | CircleMid(int s1, int s2, int R) | ||
- | { int x = 0, y = R; | ||
- | int P = 1-R, X2 = 3, Y2 = 2*R-2; | ||
- | while (x < y) | ||
- | { | ||
- | draw_pixel_circle(x, y); | ||
- | if (P >= 0) | ||
- | { P += -Y2; Y2 -= 2; y--; } | ||
- | P += X2; | ||
- | X2 += 2; | ||
- | x++; | ||
- | } | ||
- | } | ||
- | </code> | ||
</box> | </box> | ||
- | |||
===== Elipsa ===== | ===== Elipsa ===== | ||
Řádek 194: | Řádek 196: | ||
* úhlem natočení hlavní poloosy | * úhlem natočení hlavní poloosy | ||
* rovnicí elipsy popisující geometrii: <m>F(x, y) : b^2x^2 + a^2y^2 − a^2b^2 = 0</m> | * rovnicí elipsy popisující geometrii: <m>F(x, y) : b^2x^2 + a^2y^2 − a^2b^2 = 0</m> | ||
- | Je 4x symetrická. | + | * je 4x symetrická. |
+ | * výpočet pre štvrtinu bodov | ||
</box> | </box> | ||
Řádek 205: | Řádek 208: | ||
* založen na určování polohy midpointu vůči elipse | * založen na určování polohy midpointu vůči elipse | ||
* V ose X/Y postupujeme o 1, v Y/X o posunu rozhoduje znaménko prediktoru. | * V ose X/Y postupujeme o 1, v Y/X o posunu rozhoduje znaménko prediktoru. | ||
- | </box> | ||
+ | {{ temata:11-rasterizace:midelipsa.png?500 }} | ||
+ | </box> | ||
===== Křivky ===== | ===== Křivky ===== | ||
<box left round blue 90%|**Popis**> | <box left round blue 90%|**Popis**> |