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:
enum RGB
.
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,
Shape
do 2D primitiv Rectangle, Circle
a Line
. Přesný tvar konstruktorů a detaily viz níže.
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.
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
.