Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

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) 
  
-|&lt;m&gt;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á &quot;floating-point aritmetiku&quot;
 +  * 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á aritmetikavysoká efektivitasnadná 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**>
temata/11-rasterizace/main.1464261121.txt.gz · Poslední úprava: 2016/05/26 13:12 autor: xpavel27
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki