source: esimerkit/2012k/live/live20/SierpinskiAnimaatio/SierpinskiAnimaatio/SierpinskiAnimaatio.cs @ 1483

Revision 433, 3.2 KB checked in by anlakane, 6 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4using Jypeli.Assets;
5using Jypeli.Controls;
6using Jypeli.Effects;
7using Jypeli.Widgets;
8
9/// @author  Vesa Lappalainen
10/// @version 06.11.2011
11/// @author Antti-Jussi Lakanen
12/// @version 15.3.2012 Tulostuksia ja F1-nappula
13/// <summary>
14/// Piirretään Sierpinskin kolmiota
15///  - Space puolittaa kolmion minimikoon
16///  - Enter lisää yhden kolmion
17///  - Del palaa alkuun
18/// </summary>
19public class SierpinskiAnimaatio : Game
20{
21    private static double pieninKorkeus = 400.0;
22    private static int kolmioidenEnimmaisMaara = 1;
23    private static int kolmiotaNyt = 0;
24
25
26    /// <summary>
27    /// Vaihdetaan taustaväri ja asetetaan kuuntelijat
28    /// </summary>
29    public override void Begin()
30    {
31        Level.BackgroundColor = Color.White;
32        MessageDisplay.Add("Paina F1 niin saat ohjeet");
33        Keyboard.Listen(Key.Space, ButtonState.Pressed, delegate { pieninKorkeus /= 2; MessageDisplay.Add("Pienin korkeus nyt " + pieninKorkeus); }, "Puolittaa kolmion minimikoon");
34        Keyboard.Listen(Key.Enter, ButtonState.Pressed, KasvataMaaraa, "Lisää yhden kolmion");
35        Keyboard.Listen(Key.Delete, ButtonState.Pressed, delegate { kolmioidenEnimmaisMaara = 1; pieninKorkeus = 400; }, "Palaa alkuun (resetoi minimikoon ja poistaa kolmiot)");
36        Keyboard.Listen(Key.Add, ButtonState.Pressed, delegate { kolmioidenEnimmaisMaara = 100000; }, "Valmis");
37        Keyboard.Listen(Key.F1, ButtonState.Pressed, ShowControlHelp, null);
38    }
39
40
41    public void KasvataMaaraa()
42    {
43        kolmioidenEnimmaisMaara++;
44        MessageDisplay.Add("Kolmioita nyt " + kolmioidenEnimmaisMaara);
45        if (kolmioidenEnimmaisMaara > 200) kolmioidenEnimmaisMaara *= 2;
46    }
47
48    /// <summary>
49    /// Tämä tehdään aina kun ruutua pitää päivittää
50    /// </summary>
51    /// <param name="canvas">Piirtoalue, johon voi piirtää</param>
52    protected override void Paint(Canvas canvas)
53    {
54        base.Paint(canvas);
55        double korkeus = 300;
56        kolmiotaNyt = 0;
57        SierpinskinKolmio(canvas, 0, -korkeus, korkeus);
58    }
59
60
61    /// <summary>
62    /// Piirtää Sierpinskin kolmion.
63    /// </summary>
64    /// <param name="canvas">Piirtoalue johon piirretään</param>
65    /// <param name="x">kolmion kärjen keskipisteen x-koord</param>
66    /// <param name="y">kolmion kärjen keskipisteen y-koord</param>
67    /// <param name="h">kolmion korkeus</param>
68    public static void SierpinskinKolmio(Canvas canvas, double x, double y, double h)
69    {
70        if (kolmiotaNyt >= kolmioidenEnimmaisMaara) return;
71
72        double s2 = h / (Math.Sqrt(3)); // sivun pituus s/2
73
74        Vector p1 = new Vector(x, y);
75        Vector p2 = new Vector(x - s2, y + h);
76        Vector p3 = new Vector(x + s2, y + h);
77
78        canvas.DrawLine(p1, p2);
79        canvas.DrawLine(p2, p3);
80        canvas.DrawLine(p3, p1);
81
82
83        kolmiotaNyt++;
84        if (h < pieninKorkeus) return;
85
86        SierpinskinKolmio(canvas, x - s2, y, h / 2); // Vasen alakolmio
87        SierpinskinKolmio(canvas, x + s2, y, h / 2); // Oikea alakolmio
88        SierpinskinKolmio(canvas, x, y + h, h / 2); // Yläkolmio
89    }
90
91}
Note: See TracBrowser for help on using the repository browser.