-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathVector.cs
More file actions
131 lines (106 loc) · 3.09 KB
/
Copy pathVector.cs
File metadata and controls
131 lines (106 loc) · 3.09 KB
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
using System;
using System.Numerics;
using System.Text.Json.Serialization;
using Pmad.Geometry;
namespace Pmad.Cartography
{
[Obsolete("Use Pmad.Geometry.Vector2D instead.")]
public struct Vector : IEquatable<Vector>
{
private readonly Vector2D vector;
public static readonly Vector Zero = new Vector(0, 0);
public static readonly Vector One = new Vector(1, 1);
[JsonConstructor]
public Vector(double x, double y)
{
vector = new Vector2D(x, y);
}
public Vector(Vector2D vector)
{
this.vector = vector;
}
public Vector(Vector2 floatVector)
{
vector = new Vector2D(floatVector.X, floatVector.Y);
}
public static Vector FromLatLonDelta(double lat, double lon)
{
return new Vector(lon, lat);
}
public static Vector FromXYDelta(double x, double y)
{
return new Vector(x, y);
}
[JsonPropertyName("y")]
public double Y => vector.Y;
[JsonPropertyName("x")]
public double X => vector.X;
[JsonIgnore]
public double DeltaLon => X;
[JsonIgnore]
public double DeltaLat => Y;
public double LengthSquared()
{
return vector.LengthSquared();
}
public Vector2D Vector2D => vector;
internal double Surface()
{
return vector.Area();
}
public bool Equals(Vector other)
{
return other.vector == this.vector;
}
public override bool Equals(object? obj)
{
if (obj is Vector v)
{
return Equals(v);
}
return false;
}
public override int GetHashCode()
{
return vector.GetHashCode();
}
public double Atan2()
{
return vector.Atan2();
}
public Vector2 ToFloat()
{
return new Vector2((float)X, (float)Y);
}
public static Vector operator *(Vector v, double f)
{
return new Vector(v.vector * f);
}
public static Vector operator /(Vector v, double f)
{
return new Vector(v.vector / f);
}
public static Vector operator /(Vector a, Vector b)
{
return new Vector(a.vector / b.vector);
}
public static Vector operator *(Vector a, Vector b)
{
return new Vector(a.vector * b.vector);
}
public static Vector operator +(Vector a, Vector b)
{
return new Vector(a.vector + b.vector);
}
public static Vector operator -(Vector a, Vector b)
{
return new Vector(a.vector - b.vector);
}
public override string ToString()
{
return FormattableString.Invariant($"({X};{Y})");
}
public static implicit operator Vector(Vector2D d) => new Vector(d);
public static implicit operator Vector2D(Vector d) => d.Vector2D;
}
}