Úloha 069: Kreslení subdivision křivky

Úkolem je implementovat algoritmus rasterizace subdivision křivky podle tzv Chaikinova schématu. Podle vstupního řídícího polygonu (posloupnost řídících bodů v rovině) je potřeba nakreslit do rastrového obrázku křivku s přesností na jeden pixel.

Chaikin

Kromě implementace vykreslovacího algoritmu nakreslete pomocí těchto křivek nějaký zajímavý (a/nebo pěkný) obrázek, abyste demonstrovali funkčnost vaší implementace. Je vhodné, abyste použili jak otevřené (P0 <> PN), tak uzavřené (P0 = PN) křivky.

Základ

Jako Základ poslouží projekt 069subdivision z repository grcis. Je připravena jednoduchá aplikace, ve které se pro vykreslení výsledného obrázku zavolá vaše metoda Subdivision.TestImage() pro dané rozlišení výsledné bitmapy.

Technické detaily

Rasterizace subdivision křivky: ve zdrojovém souboru Subdivision.cs najdete třídu class Subdivision. Ta má obsahovat implementaci rasterizace křivek. Vykreslení jedné křivky (dané otevřenou či uzavřenou posloupností řídících bodů) má za úkol metoda Subdivision.DrawCurve( Bitmap output, List<Vector2d> P, Color col ). Pole List<Vector2d> P obsahuje posloupnost N+1 řídících bodů (N >= 1), která může být otevřená (P[0] <> P[N]) nebo uzavřená (P[0] = P[N]). Metoda musí křivku vykreslit do dané bitmapy tenkou čárou zadané barvy.

Pokud implementujete některé obecnější schéma, použijte nastavení parametru Subdivision.SetParam( string name, value ). Lze například experimentovat s koeficientem dělení (u originálního Chaikina se rovná 1/4) nebo symetrií dělicího schématu (originál je symetrický). V případě implementace některého takového rozšíření nezapomeňte doplnit stručný návod!

Testovací obrázek

Výstupní obrázek kreslíte do předem alokované bitmapy out Bitmap output. Využijte celý rozměr obrázku! Uživatelem zadaný textový parametr můžete použít k libovolnému řízení obsahu testovacího obrázku.

Materiály

Zdroje informací jsou shrnuty zde:
Chaikinův algoritmus
Brian Curless: Subdivision curves and surfaces
Tony DeRose's (PIXAR) Subdivision Video

Termín

Odevzdat do: 28. 12. 2014

Body

Základ: 12 bodů (základní algoritmus + demo),
bonusy za zobecnění nebo zvlášť pěkný testovací obrázek.

Projekt

Visual Studio 2010 projekt: 069subdivision

Zdrojový soubor

Modifikujte a odevzdejte soubor: Subdivision.cs
Do komentáře na první řádce napište své jméno!
Nezapomeňte popsat případné parametry a upozornit na zobecnění, pokud ho implementujete.


Copyright (C) 2013-2014 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)