source: esimerkit/2015k/live/live20/SierpinskiKolmio/SierpinskiKolmio/SierpinskiKolmio.cs @ 1404

Revision 1098, 2.3 KB checked in by anlakane, 3 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, Antti-Jussi Lakanen
10/// @version 19.3.2015
11///
12/// <summary>
13/// Sierpinskin kolmio
14/// </summary>
15public class SierpinskiKolmio : Game
16{
17    double korkeus = 300;
18
19    const double PIENIN_KORKEUS = 5.0;
20
21    /// <summary>
22    /// Asetetaan taustaväri ym.
23    /// </summary>
24    public override void Begin()
25    {
26        DoubleMeter kolmionKorkeusMittari = new DoubleMeter(korkeus, 1, 6000);
27        kolmionKorkeusMittari.Changed += delegate
28        {
29            korkeus = kolmionKorkeusMittari.Value;
30        };
31
32        Slider slider = new Slider(300, 20);
33        slider.BindTo(kolmionKorkeusMittari);
34        slider.Position = new Vector(200, 200);
35        slider.Track.Color = Color.Black;
36        Add(slider);
37
38        Mouse.IsCursorVisible = true;
39
40        SetWindowSize(1024, 768);
41        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");
42    }
43
44    /// <summary>
45    /// Piirtoaliohjelma.
46    /// </summary>
47    /// <param name="canvas">Piirtoalusta.</param>
48    protected override void Paint(Canvas canvas)
49    {
50        PiirraSierpinskinKolmio(canvas, 0, -korkeus, korkeus);
51        base.Paint(canvas);
52    }
53
54    /// <summary>
55    /// Piirtää Sierpinskin kolmion.
56    /// </summary>
57    /// <param name="canvas">Piirtoalusta</param>
58    /// <param name="x">Alareunan x</param>
59    /// <param name="y">Alareunan y</param>
60    /// <param name="h">Korkeus</param>
61    public void PiirraSierpinskinKolmio(Canvas canvas, double x, double y, double h)
62    {
63        if (h < PIENIN_KORKEUS) return;
64        double s2 = h / (Math.Sqrt(3)); // sivun pituus / 2 == s2
65        Vector p1 = new Vector(x, y);
66        Vector p2 = new Vector(x - s2, y + h);
67        canvas.DrawLine(p1, p2);
68        Vector p3 = new Vector(x + s2, y + h);
69        canvas.DrawLine(p2, p3);
70        canvas.DrawLine(p1, p3);
71
72        PiirraSierpinskinKolmio(canvas, x - s2, y, h / 2); // vasen
73        PiirraSierpinskinKolmio(canvas, x + s2, y, h / 2); // oikea
74        PiirraSierpinskinKolmio(canvas, x, y + h, h / 2); // ylä
75    }
76}
Note: See TracBrowser for help on using the repository browser.