Riešenia (skupina D, 2. týždeň)

Streda

Spustac.java

import sk.upjs.jpaz2.*;
public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                WinPane plocha = new WinPane();
                ObjectInspector oi = new ObjectInspector();
                oi.inspect(plocha);
                ChytraTurtle ivan = new ChytraTurtle();
                plocha.add(ivan);
                ivan.center();
                ivan.stamp();
                //ivan.rovnoramenny(97, 10);
                //ivan.retiazka(10, 5);

                //System.out.println(2%3);
                //ivan.retiazkaRGB(7, 10);
                ivan.dot(50);
                ivan.pochodzkaKruhVylepseny(10000, 50);
        }

}
 

ChytraTurtle.java

import java.awt.Color;

import sk.upjs.jpaz2.Turtle;

public class ChytraTurtle extends Turtle {
        public void nUholnik(int n, double dlzka) {
                double uhol = 180 - (((n - 2) * 180.0) / n);
                for (int i = 0; i < n; i++) {
                        this.step(dlzka);
                        this.turn(uhol);
                }

        }

        public void rovnoramenny(double rameno, double uhol) {
                // Do premennych startX a startY si ulozime
                // poziciu korytnacky pri zavolani tejto metody
                double startX = this.getX();
                double startY = this.getY();
                // Do premennej natocenie si ulozime natocenie (smer)
                // korytnacky pri zavolani tejto metody
                double natocenie = this.getDirection();
                // Kreslenie
                this.turn(-uhol / 2);
                this.step(rameno);

                // Sme v bode A, ulozime si teda x-ovu a y-ovu suradnicu
                // tohto bodu (pouzijeme ich neskor)

                // Vytvorime premennu xPoziciaA na hodnoty typu double
                double xPoziciaA;
                // Do premennej xPoziciaA ulozime aktualnu x-ovu suradnicu
                // pozicie korytnacky - ziskame ju tak, ze sa "sami seba" spytame
                // na x-ovu suradnicu
                xPoziciaA = this.getX();

                // Ako predosle, ale s y-ovou suradnicou. Kombinujeme vytvorenie
                // premennej aj inicializaciu hodnoty do jedneho prikazu
                double yPoziciaA = this.getY();

                // Dalsie kreslenie
                this.step(-rameno);
                this.turn(uhol);
                this.step(rameno);

                // Na zaver sa presunieme na ulozenu poziciu bodu A
                this.moveTo(xPoziciaA, yPoziciaA);

                // Korytnacku presunieme tam, kde bola na zaciatku, a natocime smerom,
                // akym bola natocena na zaciatku (pri volani tejto metody)
                this.setPosition(startX, startY);
                this.setDirection(natocenie);
        }

        public void mlyn(int pocetRamien, double dlzkaRamena) {
                double uhol = 360.0 / (2 * pocetRamien);
                for (int i = 0; i < pocetRamien; i++) {
                        this.rovnoramenny(dlzkaRamena, uhol);
                        this.turn(uhol * 2);

                }
        }

        public void retiazka(int pocetKoralkov, double polomerkoralu) {

                this.penUp();
                for (int i = 0; i < pocetKoralkov; i++) {

                        this.dot(polomerkoralu);
                        this.step(polomerkoralu * 2);
                }
        }

        public void retiazkaRGB(int pocetKoralov, double polomerKoralu) {

                this.penUp();
                for (int i = 0; i < pocetKoralov; i++) {
                        if (i % 3 == 0) {
                                this.setFillColor(Color.red);
                        }
                        if (i % 3 == 1) {
                                this.setFillColor(Color.green);
                        }
                        if (i % 3 == 2) {
                                this.setFillColor(Color.blue);
                        }
                        this.dot(polomerKoralu);
                        this.step(polomerKoralu * 2);
                }
        }

        public void retiazkaRGBVylepsena(int pocetKoralov, double polomerKoralu) {

                this.penUp();
                for (int i = 0; i < pocetKoralov; i++) {
                        if (i % 3 == 0) {
                                this.setFillColor(Color.red);
                        } else {
                                if (i % 3 == 1) {
                                        this.setFillColor(Color.green);
                                } else {
                                        this.setFillColor(Color.blue);
                                }
                        }

                        this.dot(polomerKoralu);
                        this.step(polomerKoralu * 2);
                }
        }

        public void pochodzkaKruh(int pocetKrokov, double polomer) {
                double startX = this.getX();
                double startY = this.getY();

                boolean jeMimoDefinovanejOblasti = false;
                for (int i = 0; i < pocetKrokov; i++) {
                        this.turn(Math.random() * 360);
                        this.step(5);
                        jeMimoDefinovanejOblasti = (this.distanceTo(startX, startY) > polomer);

                        if (jeMimoDefinovanejOblasti) {
                                this.step(-5);
                        }
                }
        }

        public void pochodzkaKruhVylepseny(int pocetKrokov, double polomer) {
                double startX = this.getX();
                double startY = this.getY();


                for (int i = 0; i < pocetKrokov; i++) {
                        this.turn(Math.random() * 360);
                        this.step(5);


                        if (this.distanceTo(startX, startY) > polomer) {
                                this.step(-5);
                        }
                }
        }

}
 

Piatok

Spustac.java

import sk.upjs.jpaz2.*;

public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                WinPane plocha = new WinPane();
                ObjectInspector oi = new ObjectInspector();
                oi.inspect(plocha);
                ChytraTurtle ivan = new ChytraTurtle();
                plocha.add(ivan);
                ivan.center();
                ivan.stamp();
                // ivan.rovnoramenny(97, 10);
                // ivan.retiazka(10, 5);

                // System.out.println(2%3);
                // ivan.retiazkaRGB(7, 10);
                // ivan.dot(50);
                // ivan.pochodzkaKruhVylepseny(10000, 50);
                // ivan.plot(5, 10, 50);
                // ivan.pochodzkaKruhT(100000, 100);
                // ivan.trojkruh(10000, 100);
                // ivan.pochodzkaStvorec(10000, 100);

                for (int i = 0; i < 10; i++) {
                        //System.out.println((int) (3 + Math.random() * 2));
                        System.out.println(5+(int)(Math.random()*4));
                }

        }

}
 

ChytraTurtle.java

import java.awt.Color;

import sk.upjs.jpaz2.Turtle;

public class ChytraTurtle extends Turtle {
        public void nUholnik(int n, double dlzka) {
                double uhol = 180 - (((n - 2) * 180.0) / n);
                for (int i = 0; i < n; i++) {
                        this.step(dlzka);
                        this.turn(uhol);
                }

        }

        public void rovnoramenny(double rameno, double uhol) {
                // Do premennych startX a startY si ulozime
                // poziciu korytnacky pri zavolani tejto metody
                double startX = this.getX();
                double startY = this.getY();
                // Do premennej natocenie si ulozime natocenie (smer)
                // korytnacky pri zavolani tejto metody
                double natocenie = this.getDirection();
                // Kreslenie
                this.turn(-uhol / 2);
                this.step(rameno);

                // Sme v bode A, ulozime si teda x-ovu a y-ovu suradnicu
                // tohto bodu (pouzijeme ich neskor)

                // Vytvorime premennu xPoziciaA na hodnoty typu double
                double xPoziciaA;
                // Do premennej xPoziciaA ulozime aktualnu x-ovu suradnicu
                // pozicie korytnacky - ziskame ju tak, ze sa "sami seba" spytame
                // na x-ovu suradnicu
                xPoziciaA = this.getX();

                // Ako predosle, ale s y-ovou suradnicou. Kombinujeme vytvorenie
                // premennej aj inicializaciu hodnoty do jedneho prikazu
                double yPoziciaA = this.getY();

                // Dalsie kreslenie
                this.step(-rameno);
                this.turn(uhol);
                this.step(rameno);

                // Na zaver sa presunieme na ulozenu poziciu bodu A
                this.moveTo(xPoziciaA, yPoziciaA);

                // Korytnacku presunieme tam, kde bola na zaciatku, a natocime smerom,
                // akym bola natocena na zaciatku (pri volani tejto metody)
                this.setPosition(startX, startY);
                this.setDirection(natocenie);
        }

        public void mlyn(int pocetRamien, double dlzkaRamena) {
                double uhol = 360.0 / (2 * pocetRamien);
                for (int i = 0; i < pocetRamien; i++) {
                        this.rovnoramenny(dlzkaRamena, uhol);
                        this.turn(uhol * 2);

                }
        }

        public void retiazka(int pocetKoralkov, double polomerkoralu) {

                this.penUp();
                for (int i = 0; i < pocetKoralkov; i++) {

                        this.dot(polomerkoralu);
                        this.step(polomerkoralu * 2);
                }
        }

        public void retiazkaRGB(int pocetKoralov, double polomerKoralu) {

                this.penUp();
                for (int i = 0; i < pocetKoralov; i++) {
                        if (i % 3 == 0) {
                                this.setFillColor(Color.red);
                        }
                        if (i % 3 == 1) {
                                this.setFillColor(Color.green);
                        }
                        if (i % 3 == 2) {
                                this.setFillColor(Color.blue);
                        }
                        this.dot(polomerKoralu);
                        this.step(polomerKoralu * 2);
                }
        }

        public void retiazkaRGBVylepsena(int pocetKoralov, double polomerKoralu) {

                this.penUp();
                for (int i = 0; i < pocetKoralov; i++) {
                        if (i % 3 == 0) {
                                this.setFillColor(Color.red);
                        } else {
                                if (i % 3 == 1) {
                                        this.setFillColor(Color.green);
                                } else {
                                        this.setFillColor(Color.blue);
                                }
                        }

                        this.dot(polomerKoralu);
                        this.step(polomerKoralu * 2);
                }
        }

        public void pochodzkaKruh(int pocetKrokov, double polomer) {
                double startX = this.getX();
                double startY = this.getY();

                boolean jeMimoDefinovanejOblasti = false;
                for (int i = 0; i < pocetKrokov; i++) {
                        this.turn(Math.random() * 360);
                        this.step(5);
                        jeMimoDefinovanejOblasti = (this.distanceTo(startX, startY) > polomer);

                        if (jeMimoDefinovanejOblasti) {
                                this.step(-5);
                        }
                }
        }

        public void pochodzkaKruhVylepseny(int pocetKrokov, double polomer) {
                double startX = this.getX();
                double startY = this.getY();

                for (int i = 0; i < pocetKrokov; i++) {
                        this.turn(Math.random() * 360);
                        this.step(5);

                        if (this.distanceTo(startX, startY) > polomer) {
                                this.step(-5);
                        }
                }
        }

        public void plot(int n, double sirka, double vyska) {
                for (int i = 0; i < n; i++) {
                        this.step(vyska);
                        this.turn(30);
                        this.step(sirka);
                        this.turn(120);
                        this.step(sirka);
                        this.turn(30);
                        this.step(vyska);
                        this.turn(90);
                        this.step(sirka);
                        this.step(-sirka);
                        this.turn(90);

                }
        }

        public void pochodzkaKruhT(int pocetKrokov, double polomer) {

                boolean jeMimo = false;
                double startX = this.getX();
                double startY = this.getY();
                int a = 0;
                for (int i = 0; i < pocetKrokov; i++) {
                        if (a < 101) {
                                this.setPenColor(Color.red);
                        }
                        if (a > 100 && a < 183) {
                                this.setPenColor(Color.blue);
                        }
                        if (a > 182 && a < 306) {
                                this.setPenColor(Color.black);
                        }
                        a = a + 1;
                        if (a > 306) {
                                a = 0;
                        }
                        this.turn(Math.random() * 360);
                        this.step(5);

                        jeMimo = this.distanceTo(startX, startY) > polomer;
                        if (jeMimo) {
                                this.step(-5);
                        }

                }
        }

        public void pochodzkaKruhT2(int pocetKrokov, double polomer) {

                boolean jeMimo = false;
                double startX = this.getX();
                double startY = this.getY();
                for (int i = 0; i < pocetKrokov; i++) {
                        if (i % 304 < 100) {
                                this.setPenColor(Color.red);
                        }
                        if (i % 304 < 183 && i % 304 >= 100) {
                                this.setPenColor(Color.blue);
                        }
                        if (i % 304 >= 183) {
                                this.setPenColor(Color.black);
                        }

                        this.turn(Math.random() * 360);
                        this.step(5);

                        jeMimo = this.distanceTo(startX, startY) > polomer;
                        if (jeMimo) {
                                this.step(-5);
                        }

                }
        }

        public void trojkruh(int pocetKrokov, double polomer) {
                double x = this.getX(), y = this.getY(), dir = this.getDirection();

                Color farba = this.getPenColor();

                for (int i = 0; i < pocetKrokov; i++) {
                        this.turn(Math.random() * 360);
                        this.step(5);

                        if (this.distanceTo(x, y) > polomer) {
                                this.step(-5);
                        }

                        if (this.distanceTo(x, y) < polomer / 3) {
                                // this.setPenDown(false);
                                this.penUp();
                        } else {
                                if (this.distanceTo(x, y) < (polomer / 3) * 2) {
                                        this.penDown();
                                        this.setPenColor(Color.blue);
                                } else {
                                        this.penDown();
                                        this.setPenColor(Color.red);
                                }
                        }
                }
                this.setPosition(x, y);
                this.setDirection(dir);
                this.setPenColor(farba);

        }

        public void pochodzkaStvorec(int pocetKrokov, double strana) {
                double startX = this.getX();
                double startY = this.getY();
                for (int i = 0; i < pocetKrokov; i++) {
                        this.turn(Math.random() * 360);
                        this.step(10);
                        if (this.getX() > startX + strana / 2
                                        || this.getX() < startX - strana / 2
                                        || this.getY() > startY + strana / 2
                                        || this.getY() < startY - strana / 2) {
                                this.step(-10);

                        }
                }

        }
}
 
public void moderneUmenie(int pocetBodiek,double sirka, double vyska)
{
        double startX = this.getX();
        double startY = this.getY();
        double startR = this.getDirection();

        this.setDirection(90);
        this.step(sirka);
        this.turn(90);
        this.step(vyska);
        this.turn(90);
        this.step(sirka);
        this.turn(90);
        this.step(vyska);

        double polomer = 0.0;

        for(int i=0;i<pocetBodiek;i++)
        {

                polomer=2+Math.random()*(7-2);

                double suradnicaX = (startX+polomer)+Math.random()*(sirka-polomer-polomer);

                double suradnicaY = (startY+polomer)+Math.random()*(vyska-polomer-polomer);

                if(Math.random()>0.5)
                {
                        this.setFillColor(Color.red);
                }
                else
                {
                        this.setFillColor(Color.blue);
                }

                this.setPosition(suradnicaX,suradnicaY);
                this.dot(polomer);
        }

        this.setPosition(startX,startY);
        this.setDirection(startR);

}