Warning
This page is located in archive.

Úloha k procvičení 2 - Jednoduchá 2D Grafika

Tato úloha je domací úkol z letního semestru 2013. Od té doby nebyla revidována ani nebyly opraveny potenciální nedostatky v zadání.

V rámci domácího úkolu naprogramujte implementaci tříd pro reprezentaci grafických primitiv a podporu tisku v režimu CMYK. Začněte tím, že si stáhnete a nahrajete do projektu zdrojové kódy opt02.zip.

Vaše vypracované třídy dejte do balíčku cz.cvut.k36.pr2.hw.hw02.impl.

Úkoly:

  1. Nastudujte si jak je strukturovaný enum RGB.
  2. Obdobně implemntujte enum CMYK, který bude mít položky CYAN, MAGENTA, YELLOW, KEY. Co mají které metody dělat najdete v javadocu k interface Ink. Vzorečky na převody najdete na Internetu, například RGB -> CMYK a CMYK -> RGB,
  3. Implementujte Shape do 2D primitiv Rectangle, Circle a Line. Přesný tvar konstruktorů a detaily viz níže.
  4. Vyzkoušejte váš kód pomocí main metod ve třídách Test a CMYKTest. Pokud budete mít vše správně, vygenerují se vám k projektu zajímavé obrázky. ;-)
  5. Odevzdejte vytvořené třídy. Můžete si vytvořit libovolné množství pomocných třídy, pokud to uznáte za vhodné. V tom případě je odevzdávejte také.

Implementace grafických primitiv

Pixely jsou reprezentovány pomocí celočíselných souřadnic x, y. Tyto souřadnice udávají pozici středu pixelu. Z toho vyplývá, že pixel má rozměry 1×1.

Pro operace s grafickými primitivy můžete aplikovat vaše znalosti z analytické geometrie. Anebo si můžete nastudovat dokumentaci k různým Java AWT knihovnám, například Shape, Ellipse2D.Double, Rectangle2D.Double a Line2D.Double. Implementace řešení je čistě na vás, přesnost výpočtu provádějte pomocí double, nikoliv float.

Pro třídy Rectangle a Circle platí, že se do pixelu na souřadnicích x, y zakreslí pokud bude střed pixelu ležet v oblasti pokryté daným primitivem. Úsečka se do pixelu na souřadnicích x, y vkreslí, pokud je střed pixelu úsečce blíže, než je vzdálenost rohu pixelu od jeho středu.

Konstruktory pro primitiva jsou následující:

public Rectangle(Color color, double bottomLeftX, double bottomLeftY, double topRightX, double topRightY)
 
public Line(Color color, double startX, double startY, double endX, double endY) 
 
public Circle(Color color, double centerX, double centerY, double radius)

Nakonec implementujte interface ShapeHolder do třídy ShapeHolderImpl. Třída bude mít bezparametrický konstruktor. Funkci metod najdete v javadocu interface ShapeHolder.

courses/a0b36pr2/opt/opt02.txt · Last modified: 2015/03/05 07:18 by faiglj