ú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ákladem 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.

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 ke studiu jsou shrnuty zde:
Chaikinův algoritmus
Subdivision curves

TERMÍN: do 22. 12. 2013

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

PROJEKT: 069subdivision

ZDROJOVÝ SOUBOR: Subdivision.cs


[Cvičení NPGR003]  [Návody k zápočtům v C#]  [Přednášky a semináře]  [Odkazy na demonstrace]

Valid XHTML 1.1 Copyright (C) 2013 J.Pelikán, last change: $Date: 2014-10-03 15:44:39 +0200 (Fri, 03 Oct 2014) $
Send comments/requests to pepca.at.cgg.mff.cuni.cz