Úloha 025: Výpočet izočar ve 2D

Úkolem je implementovat nějaký algoritmus pro kreslení soustavy izočar ve 2D. Vstupem je funkce f(x,y) a pole prahových hodnot [hi]i=0..N, výstup je potřeba kreslit v deném měřítku do předem připraveného rastrového obrázku (Bitmap).

Základ

Jako základ poslouží projekt 025contours z repository grcis. Je připravena aplikace, která v jednoduchém okně zobrazuje spočítaný rastrový obrázek (Bitmap). Je možné přepínat několik implicitních funkcí (listbox) a myší ovládat překreslování obrázku s izočárami (detaily viz níže).

Ovládání programu

  • Redraw - překreslí bitmapu např. po změně rozměru okénka.
  • Reset scale - vrátí počáteční hodnoty měřítka (scale), posunutí (origin) a posunutí hodnoty (valueDrift).
  • Mouse click - vypíše do informačního panelu souřadnice a skutečnou hodnotu implicitní funkce.
  • Mouse drag left - posunuje počátek souřadnic (origin), tak si můžete prohlédnout další oblasti definičního oboru funkce.
  • Mouse drag right - ve svislém směru mění měřítko zobrazení (scale), ve vodorovném posunuje hodnotu funkce (obor hodnot, valueDrift).

Náměty

Inspirovat se můžete např. rastrovm algoritmem na kreslení izočar (Pelikán, 1992) uvedeným v této prezentaci od strany 25. Další detaily najdete v původní publikaci. Můžete samozřejmě přijít s jakýmkoli svým vlastním nápadem, jenom by bylo dobré, abyste dokázali kreslit izočáry rychle, dostatečně přesně a z celého souboru prahových hodnot thr.

Technicky

Co modifikovat: ve zdrojovém souboru Contours.cs najdete metodu InitializeFunctions(), do ní můžete přidávat další testované implicitní funkce (functions) a/nebo měnit nastavení sady prahových hodnot pro izočáry (thr).
Hlavně ale musíte přeprogramovat funkci ComputeContours() kreslící izočáry do daného rastrového obrázku.
Hodnotit budu bezchybnost algoritmu a jeho rychlost.

Projekt

Můžete použít Visual Studio 2010 projekt: 025contours.

Zdrojový soubor

Pokud použijete tento projekt, pošlete jenom zdrojový soubor Contours.cs. V opačném případě odevzdejte celý VS projekt. Nezapomeňte stručně popsat ovládání.


Copyright (C) 2011-2015 J.Pelikán, last change: 2015-03-30 12:22:45 +0200 (Mon, 30 Mar 2015)