TlačiťTlačiť Slovenčina English Hľadať RSS

© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 24. 4. 2024.

Stránka sa načítava, prosím čakajte…

Dátum: 22. 2. 2013, pred viacerými rokmi, aktualizované: 30. 7. 2020, pred štyrmi rokmi

Zadanie

Vyriešte kreslenie nasledujúceho útvaru s pomocou rekurzie.

 
obrázok

Riešenie

~

import knižnica.*;

public class Štvorcoid extends GRobot
{
	private Štvorcoid()
	{
		// Úvodné nastavenia:
		super(600, 600);
		Svet.zbaľ();
		Svet.nekresli();
		skry();

		// Na umiestnenie kresby do stredu je potrebné posunúť sa
		// o polovicu uhlopriečky štvorca správnym smerom:
		double dĺžka = 300;
		skoč(0, -dĺžka / Math.sqrt(2));

		// (Poznámka: ak ste porozumeli riadku vyššie, tak viete,
		//  že sa robot posunul o polovicu dĺžky uhlopriečky smerom
		//  nadol. Tak sa dostal do spodného rohu najväčšieho štvorca
		//  na kresbe v zadaní. Odtiaľ začne kresliť a tam aj skončí.)


		// Zvyšok zabezpečí niekoľkonásobná krekurzia metódy štvorcoid,
		// ktorá samú seba počas jedného vykonania zavolá tri razy…
		štvorcoid(dĺžka);
		Svet.kresli();
	}

	void štvorcoid(double dĺžka)
	{
		if (dĺžka > 3)
		{
			doľava(45);

			for (int i = 0; i < 4; ++i)
			{
				dopredu(dĺžka / 4);

				doľava(90);
				štvorcoid(dĺžka / 4);
				doprava(90);

				dopredu(dĺžka / 2);

				doľava(90);
				štvorcoid(dĺžka / 4);
				doprava(90);

				dopredu(dĺžka / 4);

				doprava(135);
				dopredu(dĺžka / 3);
				štvorcoid(dĺžka / 6);
				dozadu(dĺžka / 3);
				doľava(45);
			}

			doprava(45);
		}
	}

	public static void main(String[] args)
	{
		new Štvorcoid();
	}
}