Riešenia (skupina B, 9. týždeň)

import java.awt.Color;

import sk.upjs.jpaz2.Pane;
import sk.upjs.jpaz2.Turtle;

public class Tvar {

        private double stredX;
        private double stredY;
        private Color farba;
        private Turtle kreslic;

        public Tvar(double stredX, double stredY, Color farba) {
                this.stredX = stredX;
                this.stredY = stredY;
                this.farba = farba;

                this.kreslic = new Turtle();
                this.kreslic.setVisible(false);
        }

        public void vykresliSa(Pane plocha) {
                // umiestnim korytnacku do plochy - krok 1
                plocha.add(kreslic);
                kreslic.setPosition(stredX, stredY);
                kreslic.setFillColor(farba);
                kreslic.setDirection(0);

                // kreslim tvar - krok 2
                kreslenie(kreslic);

                // odstranim korytnacku z plochy - krok 3
                plocha.remove(kreslic);
        }

        public void kreslenie(Turtle kreslic) {
                System.err.println("Neviem co mam kreslit");
        }

        public boolean jeVnutornyBod(double x, double y) {
                System.err.println("Neviem ako sa to robi.");
                return false;
        }

        public double obsah() {
                System.err.println("Neviem ako mam vyratat obsah.");
                return 0;
        }

        public double getStredX() {
                return stredX;
        }

        public void setStredX(double stredX) {
                this.stredX = stredX;
        }

        public double getStredY() {
                return stredY;
        }

        public void setStredY(double stredY) {
                this.stredY = stredY;
        }

        public Color getFarba() {
                return farba;
        }

        public void setFarba(Color farba) {
                this.farba = farba;
        }
}
import java.awt.Color;

import sk.upjs.jpaz2.Turtle;

public class Kruh extends Tvar {

        private double polomer;

        public Kruh(double stredX, double stredY, Color farba, double polomer) {
                super(stredX, stredY, farba);

                this.polomer = polomer;
        }

        @Override
        public void kreslenie(Turtle kreslic) {
                kreslic.dot(polomer);
        }

        @Override
        public boolean jeVnutornyBod(double x, double y) {
                double x2 = (getStredX() - x) * (getStredX() - x);
                double y2 = (getStredY() - y) * (getStredY() - y);

                return Math.sqrt(x2 + y2) <= polomer;
        }

        @Override
        public double obsah() {
                return Math.PI * polomer * polomer;
        }

        public double getPolomer() {
                return polomer;
        }

        public void setPolomer(double polomer) {
                this.polomer = polomer;
        }
}
import java.awt.Color;

import sk.upjs.jpaz2.Turtle;

public class Obdlznik extends Tvar {

        private double sirka;
        private double vyska;

        public Obdlznik(double stredX, double stredY, Color farba, double sirka, double vyska) {
                super(stredX, stredY, farba);

                this.sirka = sirka;
                this.vyska = vyska;
        }

        @Override
        public void kreslenie(Turtle kreslic) {
                kreslic.penUp();
                kreslic.setPosition(getStredX() - sirka / 2, getStredY() + vyska / 2);
                kreslic.openPolygon();

                for (int i = 0; i < 4; i++) {
                        if (i % 2 == 0)
                                kreslic.step(vyska);
                        else
                                kreslic.step(sirka);
                        // kreslic.step(i % 2 == 0 ? vyska : sirka);
                        kreslic.turn(90);
                }

                kreslic.closePolygon();
        }

        @Override
        public boolean jeVnutornyBod(double x, double y) {
                double lavyX = getStredX() - sirka / 2;
                double lavyY = getStredY() - vyska / 2;

                return (x >= lavyX && x <= lavyX + sirka)
                                && (y >= lavyY && y <= lavyY + vyska);
        }

        @Override
        public double obsah() {
                return sirka * vyska;
        }

        public double getSirka() {
                return sirka;
        }

        public void setSirka(double sirka) {
                this.sirka = sirka;
        }

        public double getVyska() {
                return vyska;
        }

        public void setVyska(double vyska) {
                this.vyska = vyska;
        }
}
import sk.upjs.jpaz2.Pane;

public class ZoznamTvarov {

        private Tvar[] tvary = new Tvar[20];
        private int pocetTvarov = 0;

        public void pridajTvar(Tvar t) {
                // zistime, ci je nase pole dost velke
                if (pocetTvarov == tvary.length) {
                        Tvar[] noveTvary = new Tvar[tvary.length + 20];
                        System.arraycopy(tvary, 0, noveTvary, 0, tvary.length);
                        tvary = noveTvary;
                }

                tvary[pocetTvarov++] = t;
                // alternativne
                // tvary[pocetTvarov] = t;
                // pocetTvarov++;
        }

        public void nakresliVsetky(Pane plocha) {
                for (int i = 0; i < pocetTvarov; i++)
                        tvary[i].vykresliSa(plocha);
        }

        public void posun(double dx, double dy) {
                for (int i = 0; i < pocetTvarov; i++) {
                        tvary[i].setStredX(tvary[i].getStredX() + dx);
                        tvary[i].setStredY(tvary[i].getStredY() + dy);
                }
        }

        public Tvar bodTvaru(double x, double y) {
                for (int i = 0; i < pocetTvarov; i++)
                        if (tvary[i].jeVnutornyBod(x, y))
                                return tvary[i];

                return null;
        }

        public void odstranTvar(Tvar t) {
                int index = najdiTvar(t);
                if (index >= 0 && index < pocetTvarov) {
                        for (int i = index; i < pocetTvarov - 1; i++)
                                tvary[i] = tvary[i + 1];

                        pocetTvarov--;
                }
        }

        public int najdiTvar(Tvar t) {
                for (int i = 0; i < pocetTvarov; i++) {
                        // hladame spravny tvar
                        // musia sa rovnat suradnice stredov a farba
                        if ((tvary[i].getStredX() == t.getStredX()) &&
                                (tvary[i].getStredY() == t.getStredY()) &&
                                (tvary[i].getFarba().equals(t.getFarba())))
                                return i;
                }

                return -1;
        }
}