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);
}
}
}
}