Ú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.
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
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