source: 2017/30/MikkoH/Sq/Sq/Sq/Sq.cs @ 9242

Revision 9242, 2.5 KB checked in by mianhayr, 2 years ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4
5public class Sq : PhysicsGame
6{
7    List<Vector> ps = new List<Vector>();
8    double x, y, z, a, fac = Math.Pow(2, -15);
9    List<Vector> crc = new List<Vector>();
10
11    public override void Begin()
12    {
13        Window.Width = 1200; Window.Height = 800;
14        Level.Background.Color = Color.Black;
15        Mouse.IsCursorVisible = true;
16
17        double d = 0.1 + 0.1;
18
19        for (int i = -300; i <= 300; i += 10) ps.Add(new Vector(-300, i));
20        for (int i = -300; i <= 300; i += 10) ps.Add(new Vector(i, 300));
21        for (int i = 300; i >= -300; i -= 10) ps.Add(new Vector(300, i));
22        for (int i = 300; i >= -300; i -= 10) ps.Add(new Vector(i, -300));
23
24        for (int i = 0; i <= 100; i += 1)
25            crc.Add(new Vector(Math.Sin(i) * 200, Math.Cos(i) * 200));
26
27        //for (int i = 0; i < 100; i++) trans.Add(new Vector(1, 1));
28        //for (int i = 0; i < 100; i++) trans.Add(new Vector(-1, -1));
29    }
30
31    protected override void Paint(Canvas c)
32    {
33        c.BrushColor = Color.Red;
34        double d = Time.SinceLastUpdate.TotalSeconds; //Mouse.PositionOnScreen.Angle.Degrees/1000;
35
36        for (int i = 0; i < ps.Count; i++)
37            c.DrawLine(ps[i % ps.Count], ps[(i + ps.Count / 4) % ps.Count]);
38        for (int i = 0; i < crc.Count; i++)
39            c.DrawLine(crc[i % crc.Count], crc[(i+1) % crc.Count]);
40
41        Rotate(ps, false); Rotate(crc, true);
42
43        Squeeze(ps);
44
45        base.Paint(c);
46    }
47
48    void Rotate(List<Vector> vs, bool reverse)
49    {
50        double d = Time.SinceLastUpdate.TotalSeconds; if (reverse) d = -d;
51        for (int i = 0; i < vs.Count; i++)
52            vs[i] = new Vector(vs[i].X * Math.Cos(-d) - vs[i].Y * Math.Sin(-d),
53                               vs[i].X * Math.Sin(-d) + vs[i].Y * Math.Cos(-d));
54    }
55
56    void Squeeze(List<Vector> vs)
57    {
58        //if (ps[0].X > -300) fac = -Math.Pow(2, -15);
59        //if (ps[ps.Count - 1].X < -300) fac = -Math.Pow(2, -15);
60
61        for (int i = 0; i < vs.Count / 4; i++) vs[i] = new Vector(vs[i].X + (x -= fac), vs[i].Y + (y -= fac));
62        for (int i = vs.Count / 4 * 3; i < vs.Count; i++) vs[i] = new Vector(vs[i].X + (x -= fac), vs[i].Y + (y -= fac));
63        for (int i = vs.Count / 4; i < vs.Count / 2; i++) vs[i] = new Vector(vs[i].X + (z += fac), vs[i].Y + (a += fac));
64        for (int i = vs.Count / 2; i < vs.Count / 4 * 3; i++) vs[i] = new Vector (vs[i].X + (z += fac), vs[i].Y + (a += fac));
65    }
66}
Note: See TracBrowser for help on using the repository browser.