D9

import java.awt.Color;

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

public class Kruh extends Tvar {

        private double polomer;

        public Kruh(){
                super ();
        }
        public Kruh(double suradnicaX, double suradnicaY, double polomer,
                        Color farbaTvaru) {
                super(suradnicaX, suradnicaY, farbaTvaru);
                this.polomer = polomer;

        }

        @Override
        public void vykresliSa(Pane plocha){
                Turtle jozko = new Turtle();
                plocha.add(jozko);
                jozko.setPosition(getSuradnicaX(), getSuradnicaY());
                jozko.setFillColor(getFarbaTvaru());
                jozko.dot(polomer);
                plocha.remove(jozko);

        }

        @Override
        public String toString() {
                return "Kruh: "+ super.toString()+ "polomer=" + polomer;
        }

        @Override
        public boolean jeVnutornyBod(double x, double y){
                double dx= (getSuradnicaX()-x)(getSuradnicaX()-x);
                double dy= (getSuradnicaY()-y)*(getSuradnicaY()-y);
                if (Math.sqrt(dx+dy)<=polomer){
                        return true;
                }
                return false;          
        }

        public double getPolomer() {
                return polomer;
        }

        public void setPolomer(double polomer) {
                this.polomer = polomer;
        }
        @Override
        public double Obsah(){
        double  vysledok= 0;
        vysledok=Math.PI* this.polomer* this.polomer;          

                return vysledok;

        }

}
import java.awt.Color;

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

public class Obldznik extends Tvar {
        private double a;
        private double b;

        public Obldznik() {

        }

        public Obldznik(double suradnicaX, double suradnicaY, Color farbaTvaru,
                        double a, double b) {
                super(suradnicaX, suradnicaY, farbaTvaru);
                this.a = a;
                this.b = b;
        }

        public double getA() {
                return a;
        }

        public double getB() {
                return b;
        }

        public void setA(double a) {
                this.a = a;
        }

        public void setB(double b) {
                this.b = b;
        }

        @Override
        public void vykresliSa(Pane plocha) {
                Turtle jozko = new Turtle();
                plocha.add(jozko);
                jozko.setPosition(getSuradnicaX() + a / 2, getSuradnicaY() + b / 2);
                jozko.setFillColor(getFarbaTvaru());
                jozko.penUp();
                jozko.openPolygon();
                for (int i = 0; i < 2; i++) {
                        jozko.step(b);
                        jozko.turn(-90);
                        jozko.step(a);
                        jozko.turn(-90);
                }
                jozko.closePolygon();
                plocha.remove(jozko);
        }

        @Override
        public boolean jeVnutornyBod(double x, double y) {
                double dx = x - getSuradnicaX();
                double dy = y - getSuradnicaY();
                if (Math.abs(dx) <= a / 2 && Math.abs(dy) <= b / 2) {
                        return true;
                }
                return false;
        }

        @Override
        public String toString() {
                return "Obldznik: "+ super.toString()+ "a=" + a + ", b=" + b;
        }

        @Override
public double Obsah() {
        double vysledok=0;
        vysledok= this.a*this.b;
        return vysledok;

}
}
import java.awt.Color;
import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.WinPane;


public class PlochaTvarov extends WinPane { private ZoznamTvarov tvary;

private double dragX;
private double dragY;
private boolean tahanie = false;

public PlochaTvarov() {
        this.tvary = new ZoznamTvarov();
}

@Override
protected void onMouseClicked(int x, int y, MouseEvent detail) {
        if (detail.getButton() == MouseEvent.BUTTON1) {
                if (detail.isAltDown()) {
                        this.tvary.pridajTvar(new Kruh(x,y,Math.random()*20,Color.blue));
                } else {
                        this.tvary.pridajTvar(new Obldznik(x,y,Color.red,10,40));
                }
        }

        if (detail.getButton() == MouseEvent.BUTTON3) {
                Tvar naOdstranenie = this.tvary.bodTvaru(x, y);
                if (naOdstranenie != null) {
                        this.tvary.odstranTvar(naOdstranenie);
                }
        }

        this.clear();
        this.tvary.nakresliVsetky(this);
}


@Override
protected void onMousePressed(int x, int y, MouseEvent detail) {
        if (detail.getButton() == MouseEvent.BUTTON1) {
                this.tahanie = true;
                this.dragX = x;
                this.dragY = y;
        }
}

@Override
protected void onMouseDragged(int x, int y, MouseEvent detail) {
        if (this.tahanie) {
                tvary.posun(x - this.dragX, y - this.dragY);
                this.dragX = x;
                this.dragY = y;
                this.clear();
                this.tvary.nakresliVsetky(this);
        }
}

@Override
protected void onMouseReleased(int x, int y, MouseEvent detail) {
        if (detail.getButton() == MouseEvent.BUTTON1) {
                this.tahanie = false;
        }
}

}
import java.awt.Color;
import java.io.File;

import sk.upjs.jpaz2.ObjectInspector;
import sk.upjs.jpaz2.WinPane;


public class Spustac {


        public static void main(String[] args) {

                WinPane plocha = new WinPane();
                Kruh anca = new Kruh();
                        anca.setSuradnicaX(100);
                        anca.setSuradnicaY(50);
                        anca.setFarbaTvaru(Color.blue);
                        anca.setPolomer(20);
                anca.vykresliSa(plocha);

                Obldznik obdlznik = new Obldznik();
                obdlznik.setA(100);
                obdlznik.setB(50);
                obdlznik.setFarbaTvaru(Color.RED);
                obdlznik.setSuradnicaX(150);
                obdlznik.setSuradnicaY(150);
                obdlznik.vykresliSa(plocha);

                Obldznik obdlznik2 = new Obldznik();
                obdlznik2.setA(100);
                obdlznik2.setB(100);
                obdlznik2.setFarbaTvaru(Color.RED);
                obdlznik2.setSuradnicaX(50);
                obdlznik2.setSuradnicaY(50);
                obdlznik2.vykresliSa(plocha);          

                ZoznamTvarov zoznam = new ZoznamTvarov();
                zoznam.pridajTvar(anca);
                zoznam.pridajTvar(obdlznik);
                zoznam.pridajTvar(obdlznik2);
                System.out.println(obdlznik.jeVnutornyBod(110,154));
                System.out.println(zoznam.bodTvaru(110,140));
                System.out.println(obdlznik.jeVnutornyBod(20,90));
                System.out.println(zoznam.bodTvaru(20,90));
                //PlochaTvarov pt=new PlochaTvarov();
                //ObjectInspector oi = new ObjectInspector();
                //oi.inspect(pt);
                //zoznam.ulozTvary(new File("Riso.txt"));
                //System.out.println(obdlznik.Obsah());
                System.out.println(anca.Obsah());

        }

}
import java.awt.Color;

import sk.upjs.jpaz2.Pane;

public class Tvar {

        private double suradnicaX, suradnicaY;
        private Color farbaTvaru;

        public Tvar(){
                super ();
        }
        public Tvar(double suradnicaX, double suradnicaY, Color farbaTvaru) {
                super();
                this.suradnicaX = suradnicaX;
                this.suradnicaY = suradnicaY;
                this.farbaTvaru = farbaTvaru;
        }

        public void vykresliSa(Pane plocha){
                System.out.println("neda sa to nakreslit");
        }

        public boolean jeVnutornyBod(double x, double y){
                return false;
        }
        public double getSuradnicaX() {
                return suradnicaX;
        }

        public void setSuradnicaX(double suradnicaX) {
                this.suradnicaX = suradnicaX;
        }

        public double getSuradnicaY() {
                return suradnicaY;
        }

        public void setSuradnicaY(double suradnicaY) {
                this.suradnicaY = suradnicaY;
        }

        public Color getFarbaTvaru() {
                return farbaTvaru;
        }

        public void setFarbaTvaru(Color farbaTvaru) {
                this.farbaTvaru = farbaTvaru;
        }
        @Override
        public String toString() {
                return "suradnicaX=" + suradnicaX + ", suradnicaY=" + suradnicaY
                                + ", farbaTvaru=" + farbaTvaru ;
        }

        public double Obsah(){
                 return -1;



        }
}
import java.io.File;
import java.io.PrintWriter;

import sk.upjs.jpaz2.Pane;

public class ZoznamTvarov {
        private Tvar[] tvary;

        public ZoznamTvarov() {
                tvary = new Tvar[0];

        }

        public void pridajTvar(Tvar t) {
                Tvar[] nove = new Tvar[this.tvary.length + 1];
                System.arraycopy(this.tvary, 0, nove, 0, this.tvary.length);
                nove[nove.length - 1] = t;
                this.tvary = nove;
        }

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

        }

        public void posun(double dx, double dy) {
                for (int i = 0; i < tvary.length; i++) {
                        tvary[i].setSuradnicaX(tvary[i].getSuradnicaX() + dx);
                        tvary[i].setSuradnicaY(tvary[i].getSuradnicaY() + dy);
                }
        }

        public int indexTvaru(Tvar t) {
                for (int i = 0; i < tvary.length; i++) {
                        if (tvary[i] == t) {
                                return i;
                        }
                }
                return -1;
        }

        public void odstranTvar(Tvar t) {
                int i = indexTvaru(t);
                 Tvar[] pole2 = new Tvar[tvary.length-1];
                 System.arraycopy(tvary, 0, pole2, 0,i);
                 System.arraycopy(tvary, i+1, pole2, i,tvary.length-i-1);
                 this.tvary = pole2;             
        }
         public Tvar bodTvaru(double x, double y) {

                 for(int i = 0;i < tvary.length;i++){
                         if(tvary[i].jeVnutornyBod(x, y)){
                                 return tvary[i];
                         }
                 }

         return null;
 }
         public void ulozTvary (File nazovSuboru){
                 PrintWriter pw = null;
                 try {
                        pw =new PrintWriter(nazovSuboru);
                        for (int i=0 ; i<tvary.length;i++){
                                pw.println(tvary[i].toString());
                        }
                } catch (Exception e) {
                        System.err.print("Subor sa nepodarilo otvorit");
                }
                 finally {
                         if (pw != null){
                                 pw.close();
                         }
                 }
         }

}