Cvičenia: 5. týždeň - riešenia úloh

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

import sk.upjs.jpaz2.Turtle;
import sk.upjs.jpaz2.WinPane;

public class GrafickyEditor extends WinPane {

        private Turtle kreslic = new Turtle();

        public GrafickyEditor() {
                add(kreslic);
        }

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                super.onMouseClicked(x, y, detail);

                kreslic.setPosition(x, y);
        }

        @Override
        protected void onMouseMoved(int x, int y, MouseEvent detail) {
                super.onMouseMoved(x, y, detail);

                if (detail.isAltDown()) {
                        double uhol = kreslic.directionTowards(x, y);
                        kreslic.setDirection(uhol);

                        double sx = kreslic.getX(), sy = kreslic.getY();
                        kreslic.moveTo(x, y);
                        kreslic.setPosition(sx, sy);
                }
        }

        @Override
        protected void onMouseDragged(int x, int y, MouseEvent detail) {
                super.onMouseDragged(x, y, detail);

                kreslic.moveTo(x, y);
        }

        @Override
        protected void onKeyPressed(KeyEvent e) {
                super.onKeyPressed(e);

                if (e.getKeyChar() == 'n') {
                        int r = (int)(Math.random() * 256);
                        int g = (int)(Math.random() * 256);
                        int b = (int)(Math.random() * 256);

                        kreslic.setPenColor(new Color(r, g, b));
                }
        }
}
import java.awt.Color;
import java.awt.event.MouseEvent;

import sk.upjs.jpaz2.JPAZUtilities;
import sk.upjs.jpaz2.Turtle;
import sk.upjs.jpaz2.WinPane;

public class Korytnackovo extends WinPane {

        private Turtle[] korytnacky = new Turtle[10];

        public Korytnackovo() {
                for (int i = 0; i < korytnacky.length; i++) {
                        // vytvorim novu korytnacku
                        Turtle k = new Turtle();
                        // vygenerujem nahodne suradnice
                        double x = Math.random() * getWidth();
                        double y = Math.random() * getHeight();
                        // presuniem korytnacku na vygenerovane suradnice
                        k.setPosition(x, y);
                        // natocime korytnacku nahodne
                        k.setDirection(Math.random() * 360);
                        // pridame korytnacku do plochy
                        add(k);

                        // pridam korytnacku do pola
                        korytnacky[i] = k;
                }
        }

        public void posunITu(int idx, double dlzka) {
                korytnacky[idx].step(dlzka);
        }

        public void nahodneFarby() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int r = (int) (Math.random() * 256);
                        int g = (int) (Math.random() * 256);
                        int b = (int) (Math.random() * 256);

                        korytnacky[i].setPenColor(new Color(r, g, b));
                }
        }

        public Color sFarbouVon(int index) {
                return korytnacky[index].getPenColor();
        }

        public void krok() {
                for (int i = 0; i < korytnacky.length; i++) {
                        int idx = (i + 1) % korytnacky.length;
                        // natocime korytnacku k (i + 1) = idx
                        double xIdx = korytnacky[idx].getX();
                        double yIdx = korytnacky[idx].getY();
                        double uhol = korytnacky[i].directionTowards(xIdx, yIdx);
                        korytnacky[i].setDirection(uhol);

                        // urobime krok smerom k natocenej korytnacke
                        double dlzka = korytnacky[i].distanceTo(xIdx, yIdx) / 10;
                        korytnacky[i].step(dlzka);
                }
        }

        public void kroky(int pocetKrokov) {
                for (int i = 0; i < pocetKrokov; i++) {
                        krok();
                        JPAZUtilities.delay(500);
                }
        }

        @Override
        protected void onMouseClicked(int x, int y, MouseEvent detail) {
                super.onMouseClicked(x, y, detail);

                // nahodne zvolime index korytnacky
                int idx = (int) (Math.random() * korytnacky.length);
                // presunieme korytnacku na miesto kliknutia
                korytnacky[idx].setPosition(x, y);
        }

        public void doKruhu(double polomer) {

                Turtle pomocna = new Turtle();
                add(pomocna);
                pomocna.center();
                pomocna.penUp();

                for (int i = 0; i < korytnacky.length; i++) {

                        pomocna.step(polomer);
                        double x = pomocna.getX();
                        double y = pomocna.getY();
                        pomocna.step(-polomer);

                        pomocna.turn(360.0 / korytnacky.length);
                        korytnacky[i].setPosition(x, y);

                }

                remove(pomocna);

        }

        public int pocetTopKorytnaciek(double zhora) {
                ciara(zhora);
                int pocet = 0;
                for (int i = 0; i < korytnacky.length; i++) {
                        if (korytnacky[i].getY() <= zhora)
                                pocet++;
                }
                return pocet;
        }

        public void ciara(double y) {
                Turtle sejk = new Turtle();
                this.add(sejk);
                sejk.setPosition(0, y);
                sejk.setDirection(90);
                sejk.step(this.getWidth());
                this.remove(sejk);
        }

        public void bezpecnyKruh(int indexKorytnacky) {
                double vzdialenost = Double.POSITIVE_INFINITY;
                if (indexKorytnacky < 0 || indexKorytnacky >= korytnacky.length)
                        return;
                for (int i = 0; i < korytnacky.length; i++) {
                        if (i == indexKorytnacky) {
                                continue;
                        }
                        if (vzdialenost > korytnacky[indexKorytnacky]
                                        .distanceTo(korytnacky[i].getPosition())) {
                                vzdialenost = korytnacky[indexKorytnacky]
                                                .distanceTo(korytnacky[i].getPosition());
                        }

                }
                korytnacky[indexKorytnacky].dot(vzdialenost);
        }

        public int laviciarka() {
                int kandidat = 0;
                for (int i = 1; i < korytnacky.length; i++) {
                        if (korytnacky[kandidat].getX() > korytnacky[i].getX()) {
                                kandidat = i;
                        }

                }
                return kandidat;
        }

        public double najblizsie() {
                double vysledok = Double.POSITIVE_INFINITY;
                for (int i = 0; i < korytnacky.length - 1; i++) {
                        for (int j = i + 1; j < korytnacky.length; j++) {
                                double vzdialenost = korytnacky[i].distanceTo(korytnacky[j]
                                                .getPosition());
                                if (vzdialenost < vysledok) {
                                        vysledok = vzdialenost;
                                }
                        }

                }

                return vysledok;
        }
}