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

Revision 9287, 2.5 KB checked in by mianhayr, 23 months ago (diff)
Line 
1using System;
2using System.Collections.Generic;
3using Jypeli;
4
5public class Sq : PhysicsGame
6{
7    List<Vector> ps, crc;
8    int dist = 10, pts = 150, mag = 100, minmag = 1, maxmag = 300, magc = 4, minrad = 1, maxrad = 100;
9    double rad = 50, radc = 0.01;
10
11    public override void Begin()
12    {
13        Window.Width = 1200; Window.Height = 800;
14        Mouse.IsCursorVisible = true;
15        Level.Background.Color = Color.Black;
16
17        ps = CreateSquare(mag, dist);
18        crc = CreateCircle(rad, pts);
19    }   
20
21    // s = length of side, d = distance between pts
22    List<Vector> CreateSquare(int s, int d)
23    {
24        List<Vector> sq = new List<Vector>();
25        for (int i = -s; i <= s; i += d) sq.Add(new Vector(-s, i));
26        for (int i = -s; i <= s; i += d) sq.Add(new Vector(i, s));
27        for (int i = s; i >= -s; i -= d) sq.Add(new Vector(s, i));
28        for (int i = s; i >= -s; i -= d) sq.Add(new Vector(i, -s));
29        return sq;
30    }
31
32    // r = radius, n = number of pts
33    List<Vector> CreateCircle(double r, double n)
34    {
35        List<Vector> crc = new List<Vector>();
36        for (int i = 0; i <= n; i++)
37            crc.Add(new Vector(Math.Sin(i) * r, Math.Cos(i) * r));
38        return crc;
39    }
40
41    void Rotate(List<Vector> vs, bool reverse = false)
42    {
43        double d = Time.SinceLastUpdate.TotalSeconds;
44        if (reverse) d = -d;
45        for (int i = 0; i < vs.Count; i++)
46            vs[i] = new Vector(vs[i].X * Math.Cos(-d) - vs[i].Y * Math.Sin(-d),
47                               vs[i].X * Math.Sin(-d) + vs[i].Y * Math.Cos(-d));
48    }
49
50    protected override void Paint(Canvas c)
51    {
52        c.BrushColor = Color.Red;
53
54        // draws and squeezes the square
55        for (int i = 0; i < ps.Count; i++)
56        {
57            c.DrawLine(ps[i % ps.Count], ps[(i + ps.Count / 4) % ps.Count]);
58            ps[i] = Vector.FromLengthAndAngle(ps[i].Magnitude + magc, ps[i].Angle);
59            if (ps[i].Magnitude < minmag || ps[i].Magnitude > maxmag)
60                magc = -magc;
61        }
62
63        c.BrushColor = Color.Blue;
64
65        // draws and squeezes the circle
66        for (int i = 0; i < crc.Count; i++)
67        {
68            c.DrawLine(crc[i % crc.Count], crc[(i + 2) % crc.Count]);
69            crc[i] = new Vector(Math.Sin(i) * rad, Math.Cos(i) * rad);
70            if (rad < minrad || rad > maxrad) radc = -radc;
71            rad -= radc;
72        }
73
74        Rotate(ps); Rotate(crc, true);
75
76        base.Paint(c);
77    }
78}
Note: See TracBrowser for help on using the repository browser.