// Java classesimport java.awt.*;import java.applet.*;// Java class voor wiskundige functies (we hebben toRadians en sin nodig later)import java.lang.Math;// Een of ander geinige Java class waarmee je pixelachtige lijntjes en vlakjes kan tekenenimport logotekenap.*;public class PO1 extends TekenApplet{ // Variabelen die het uiterlijk van het plaatje bepalen: // Lengte van een zijde double zijde = 20; // Aantal rijen aan blokjes int rijen = 10; // Aantal kolommen aan blokjes int kolommen = 10; // Gezellige kleurtjes :D String kleur1 = "grijs"; String kleur2 = "wit"; String kleur3 = "zwart"; // Doet niks, waarom het hier staat weet ik eigenlijk niet. :S public void initialiseer() { // Niks } // Tekent een heleboel blokjes :) public void tekenprogramma() { // Variabelen initialiseren double posx; double posy; // Een hoek van 60 graden maar dan in radialen. // Ik laat dit door een functie van Java doen omdat dat lekker exact is. ;) double angle = java.lang.Math.toRadians(60); // Bereken de sinus van de bovengenoemde hoek (deze functie neemt alleen radialen aan, dus vandaar) double sin = java.lang.Math.sin(angle); // Een trucje om de 'helft' van de breedte van het totale figuur te berekenen. // 'zijde' is de helft van de breedte van een blokje (reken maar na) // Het ziet er niet zo duidelijk uit en het klopt misschien ook niet, maar het werkte met een paar testjes :P double centerx = (kolommen-3)*zijde; // Zelfde idee, maar dan voor de y-as double centery = rijen*sin*zijde; // Variabele die later gebruikt wordt om de verschuiving per rij aan te geven double verschuif; // Een for-loop die elke rij stuk voor stuk tekent // Variabele 'y' is hier het rij-nummer for(int y = 0; y<rijen; y++) { // Verschuiving per rij verschuif = sin*zijde*2; // y-positie voor blokjes in de huidige rij posy = verschuif*y; // for-loop om kolommen in de rij te tekenen // er staat 'x += 2' omdat er per keer twee blokjes getekend worden // (dat leek mij destijds makkelijker for(int x = 0; x<kolommen; x += 2) { // De x-positie van het eerste blokje posx = x*(zijde*1.5); // Teken het blokje (-centerx en -centery om het geheel in het midden te krijgen) blok(posx-centerx, posy-centery); // x-positie van het tweede blokje (=1.5 keer de breedte van een blokje verder) posx = x*(zijde*1.5)+(zijde*1.5); // Plaats het blokje (verschuif/2 omdat het blokje schuin naast het vorige blokje komt te staan) blok(posx-centerx, posy+(verschuif/2)-centery); } } } // Functie om een blokje te tekenen // Accepteert twee parameters om de x-y positie van het blokje te bepalen public void blok(double x, double y) { penUit(); // Verplaats de teken-pointer naar positie: stap(x, y); penAan(); // Ga tekenen! ruit(0, kleur1); ruit(120, kleur2); ruit(240, kleur3); penUit(); // Zet de teken-pointer terug bij het begin stap(0 - x, 0 - y); penAan(); } // Functie voor tekenen van een stukje van een blokje (een ruit!) // Accepteert twee parameters: hoek voor de hoek waaronder de ruit getekend wordt // kleur voor de opvulling van het ruitje public void ruit(double hoek, String kleur) { // Draai de teken-pointer naar een bepaalde beginhoek rechts(hoek); vulAan(kleur); penAan(); // Teken een ruit! links(30); vooruit(zijde); links(120); vooruit(zijde); links(60); vooruit(zijde); links(120); vooruit(zijde); vulUit(); penUit(); // Zet de hoek van de teken-pointer terug op de beginstand links(30 + hoek); }}