aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/Point.cs
blob: 76beaa996fe9329eb730ba40649716a3f8dd1295 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Crow
{
    public struct Point
    {
        int _x;
        int _y;

        public int X
        {
            get { return _x; }
            set { _x = value; }
        }
        public int Y
        {
            get { return _y; }
            set { _y = value; }
        }
        public Point(int x, int y)
        {
            _x = x;
            _y = y;
        }

		public int Length {
			get { return (int)Math.Sqrt (Math.Pow (_x, 2) + Math.Pow (_y, 2)); }
		}
        public static implicit operator Cairo.Point(Point p)
        {
            return new Cairo.Point(p.X, p.Y);
        }
        public static implicit operator Cairo.PointD(Point p)
        {
            return new Cairo.PointD(p.X, p.Y);
        }
        public static implicit operator System.Drawing.Point(Point p)
        {
            return new System.Drawing.Point(p.X, p.Y);
        }
        public static implicit operator Point(System.Drawing.Point p)
        {
            return new Point(p.X, p.Y);
        }
        public static implicit operator Point(int i)
        {
            return new Point(i, i);
        }
        public static Point operator /(Point p, int d)
        {
            return new Point(p.X / d, p.Y / d);
        }
        public static Point operator *(Point p, int d)
        {
            return new Point(p.X * d, p.Y * d);
        }
        public static Point operator /(Point p, double d)
        {
            return new Point((int)(p.X / d), (int)(p.Y / d));
        }
        public static Point operator *(Point p, double d)
        {
            return new Point((int)(p.X * d), (int)(p.Y * d));
        }
        public static Point operator +(Point p1, Point p2)
        {
            return new Point(p1.X + p2.X, p1.Y + p2.Y);
        }
		public static Point operator +(Point p, int i)
		{
			return new Point(p.X + i, p.Y + i);
		}
        public static Point operator -(Point p1, Point p2)
        {
            return new Point(p1.X - p2.X, p1.Y - p2.Y);
        }
        public static bool operator >=(Point p1, Point p2)
        {
            return p1.X >= p2.X && p1.Y >= p2.Y ? true : false;
        }
        public static bool operator <=(Point p1, Point p2)
        {
            return p1.X <= p2.X && p1.Y <= p2.Y ? true : false;
        }
        public static bool operator ==(Point s, int i)
        {
            if (s.X == i && s.Y == i)
                return true;
            else
                return false;
        }
        public static bool operator !=(Point s, int i)
        {
            if (s.X == i && s.Y == i)
                return false;
            else
                return true;
        }
        public static bool operator >(Point s, int i)
        {
            if (s.X > i && s.Y > i)
                return true;
            else
                return false;
        }
        public static bool operator <(Point s, int i)
        {
            if (s.X < i && s.Y < i)
                return true;
            else
                return false;
        }
        public static bool operator ==(Point s1, Point s2)
        {
            if (s1.X == s2.X  && s1.Y == s2.Y)
                return true;
            else
                return false;
        }
        public static bool operator !=(Point s1, Point s2)
        {
            if (s1.X == s2.X && s1.Y == s2.Y)
                return false;
            else
                return true;
        }

        public override string ToString()
        {
			return string.Format("({0};{1})", X, Y);
        }

        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
		public static Point Parse(string s)
		{
			if (string.IsNullOrEmpty (s))
				return default(Point);
			string[] d = s.Trim().Split(';');
			if (d.Length == 2)
				return new Point (int.Parse (d [0]), int.Parse (d [1]));
			else if (d.Length == 1) {
				int tmp = int.Parse (d [0]);
				return new Point (tmp, tmp);
			}
			throw new Exception ("Crow.Point Parsing Error: " + s);
		}
    }

}