------------------------------------------------------------------------
Toto je README soubor projektu. Zde popiste strucne vas projekt.
Ctenari, ktery nemusi o tomto projektu nic vedet, reknete vse, 
co potrebuje znat, aby mohl vas program pouzivat. 
Nechcete-li byt zavisli na platforme, pod kterou bude soubor otevren,
nemely by komentare obsahovat ceskou diakritiku (hacky a carky). 
Komentare vetsinou obsahuji alespon:
------------------------------------------------------------------------

NAZEV PROJEKTU: Pokrocila grafika
UCEL PROJEKTU: Monosti kresleni objektu
VERZE NEBO DATUM:
AUTORI:

JAK PROJEKT SPUSTIT:

INSTRUKCE PRO UZIVATELE:

---
Tdy pro kreslen geometrickch tvar

Velice uitenmi metodami, kter obsahuje tda Graphics2D, jsou metody draw(Shape s) a fill(Shape s). Metoda draw vykresluje objekt Shape a metoda fill objekt Shape pro zmnu vypluje. Konstruktory nkterch td implementujc rozhran Shape jsou: Rectangle2D.Double(double x, double y, double w, double h), Ellipse2D.Double(double x, double y, double w, double h), Line2D.Double(double x1, double y1, souble x2, double y2), CubicCurve2D.Double(x1, y1, ctrlx1, ctrly1, ctrlx2, ctrly2, x2, y2) (Bezirova kivka), QuadCurve2D.Double(x1, y1, ctrlx1, ctrly1, x2, y2) (parabola)... Parametry x, y u konstruktor elips a obdlnk jsou souadnice levho hornho rohu, parametry w a h udvaj ku a vku. Parametry ctrlx1, ctrly1, ctrlx2, ctrly2 jsou souadnice dcch bod kivek.

Jako ukzku uvdm vykreslen Bezirovy kivky, k emu bylo ped pchodem javy 2D nutn vytvoit vlastn implementaci s pouitm vzorc a metody Polyline.

import java.awt.*; 
import java.awt.geom..*; 
//... 
public void paint (Graphics g) { 
  Graphics2D g2 = (Graphics2D)g; 
  Shape c = new new CubicCurve2D.Double(0,0,0,50,100,50,100,100); 
g2.draw(c); 
} 
//... 
A te si pedstavte, e chcete vykreslovanou kivku pevrtit podle svisl osy a zit ji na polovinu. Vzpomnte si jet, co bylo tmatem minulho dlu? Ano, pouijeme transformace pomoc tdy AffineTransform. Pevrcen a zrove zen doshneme zavolnm metody scale s parametrem sx = -0.5 a sy = 1. Tm ale transformace nekon, protoe kivka, kterou jsme vytvoili, se vlivem transformace dostala mimo viditelnou oblast okna, take ji musme posunout zase zpt, ale jakoby na opanou stranu (znamnko mnus v pkladu), protoe nesmme zapomnat na to, e jsme objektu AffineTransform zmnili jeho souadnou soustavu. Poppad bychom mohli kivku transformovat dvakrt a ped druhm transformovnm volat metodu setToTranslation msto metody translate.

//... 
public void paint (Graphics g) { 
  Graphics2D g2 = (Graphics2D)g; 
  AffineTransform af = new AffineTransform(); 
  af.scale(-0.5,1); 
    af.translate(-100,0); 
Shape c = new CubicCurve2D.Double(0,0,0,50,100,50,100,100); 
  c = af.createTransformedShape(c); 
g2.draw(c); 
} 
//... 
---
Shape
Nejdve ze veho se ale musme ble seznmit s rozhranm Shape, kter je implementovno vemi tdami reprezentujcmi geometrick objekty, tedy i tdou GeneralPath, reprezentujc cestu. K metodm tohoto rozhran se ji nebudu dle pli vracet. Jejich el je ve vech tdch, kter ho implementuj, stejn. Rozhran Shape definuje nsledujc metody:

boolean contains(double x, double y) 
  boolean contains(double x, double y, double w, double h) 
  boolean contains(Point2D p) 
  boolean contains(Rectangle2D r) 
  Rectangle getBounds() 
  Rectangle2D getBounds2D() 
PathIterator getPathIterator(AffineTransform at) 
  PathIterator getPathIterator(AffineTransform at, double flatness) 
  boolean intersects(double x, double y, double w, double h) 
  boolean intersects(Rectangle2D r) 
Varianty metody contains zjiuj, zda bod (1. a 3. varianta) nebo obdlnk (2. a 4. varianta) le uvnit objektu, ze kterho jsou volny.

Metody getBounds a getBounds2D vracej obdlnk uzavrajc dan objekt, piem metoda getBounds2D pracuje s promnnmi typu double a vrac obdlnk Rectangle2D, zatmco metoda getBounds pracuje pouze s promnnmi typu int a vrac obdlnk Rectangle.

Dv varianty metody getPathIterator vracej instanci tdy implementujc rozhran PathIterator. PathIterator obsahuje metody, ktermi "k", jak m bt tvar vykreslovn (te rovn ra, te parabola atd.). Tmto rozhranm se jet mon budeme zabvat v nkterm z dalch lnk. Nyn pro ns ale metoda getPathIterator nen nijak vznamn a nebudeme se j dle zabvat.

Metoda intersects zjiuje, zda dan objekt protn obdlnk, zadan bu souadnicemi levho hornho rohu a kou a vkou, nebo objektem Rectangle2D. e se protnaj, znamen, e maj alespo jeden bod spolen. Tato metoda ale nemus bt stoprocentn spolehliv, protoe, jak se uvd v dokumentaci, pokud by byl pesn vpoet pli nron, me se provst pouze piblin.

---