summaryrefslogtreecommitdiff
path: root/physics/Geometry.cs
blob: e78f3c58047c71c313c2827886be6649842d013b (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
// Copyright 2006 Alp Toker <alp@atoker.com>
// This software is made available under the MIT License
// See COPYING for details

using System;

namespace PhysModel
{
	public struct Point
	{
		public double X;
		public double Y;

		public Point (double x, double y)
		{
			X = x;
			Y = y;
		}

		public static Point Origin = new Point (0, 0);

		public static Point operator + (Point a, Vector b)
		{
			return new Point (a.X + b.X, a.Y + b.Y);
		}

		public static Point operator - (Point a, Vector b)
		{
			return new Point (a.X - b.X, a.Y - b.Y);
		}

		public static Vector operator - (Point a, Point b)
		{
			return new Vector (a.X - b.X, a.Y - b.Y);
		}

		//?
		public static Point operator / (Point a, Vector b)
		{
			return new Point (a.X / b.X, a.Y / b.Y);
		}
	}

	public struct Vector
	{
		public double X;
		public double Y;

		public Vector (double x, double y)
		{
			X = x;
			Y = y;
		}

		public static Vector operator + (Vector a, Vector b)
		{
			return new Vector (a.X + b.X, a.Y + b.Y);
		}

		public static Vector operator - (Vector a, Vector b)
		{
			return new Vector (a.X - b.X, a.Y - b.Y);
		}

		//sanity check this
		/*
		public static Vector operator * (Vector a, Vector b)
		{
			return new Vector (a.X * b.X, a.Y * b.Y);
		}
		*/

		//doesn't make sense
		/*
		public static Vector operator / (Vector a, Vector b)
		{
			return new Vector (a.X / b.X, a.Y / b.Y);
		}
		*/

		public static Vector operator * (Vector a, double b)
		{
			return new Vector (a.X * b, a.Y * b);
		}

		//?
		public static Vector operator * (double a, Vector b)
		{
			return new Vector (b.X * a, b.Y * a);
		}

		public static Vector operator / (Vector a, double b)
		{
			return new Vector (a.X / b, a.Y / b);
		}
	}
}