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

Revision 9287, 2.5 KB checked in by mianhayr, 2 years ago (diff)
RevLine 
[9184]1using System;
2using System.Collections.Generic;
3using Jypeli;
4
5public class Sq : PhysicsGame
6{
[9285]7    List<Vector> ps, crc;
[9287]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;
[9184]10
11    public override void Begin()
12    {
[9236]13        Window.Width = 1200; Window.Height = 800;
[9242]14        Mouse.IsCursorVisible = true;
[9284]15        Level.Background.Color = Color.Black;
[9242]16
[9287]17        ps = CreateSquare(mag, dist);
18        crc = CreateCircle(rad, pts);
[9286]19    }   
[9285]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
[9286]32    // r = radius, n = number of pts
[9287]33    List<Vector> CreateCircle(double r, double n)
[9285]34    {
35        List<Vector> crc = new List<Vector>();
36        for (int i = 0; i <= n; i++)
[9286]37            crc.Add(new Vector(Math.Sin(i) * r, Math.Cos(i) * r));
[9285]38        return crc;
[9184]39    }
40
[9285]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
[9184]50    protected override void Paint(Canvas c)
51    {
[9236]52        c.BrushColor = Color.Red;
[9242]53
[9287]54        // draws and squeezes the square
[9184]55        for (int i = 0; i < ps.Count; i++)
[9284]56        {
[9236]57            c.DrawLine(ps[i % ps.Count], ps[(i + ps.Count / 4) % ps.Count]);
[9287]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;
[9285]61        }
[9261]62
63        c.BrushColor = Color.Blue;
[9285]64
[9287]65        // draws and squeezes the circle
[9242]66        for (int i = 0; i < crc.Count; i++)
[9261]67        {
[9278]68            c.DrawLine(crc[i % crc.Count], crc[(i + 2) % crc.Count]);
[9284]69            crc[i] = new Vector(Math.Sin(i) * rad, Math.Cos(i) * rad);
[9287]70            if (rad < minrad || rad > maxrad) radc = -radc;
[9284]71            rad -= radc;
[9261]72        }
[9184]73
[9278]74        Rotate(ps); Rotate(crc, true);
[9240]75
[9184]76        base.Paint(c);
77    }
78}
Note: See TracBrowser for help on using the repository browser.