-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVector3.cs
More file actions
100 lines (85 loc) · 2.63 KB
/
Copy pathVector3.cs
File metadata and controls
100 lines (85 loc) · 2.63 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
using System;
using System.Diagnostics.CodeAnalysis;
namespace Inheritance.Geometry
{
public readonly struct Vector3
{
public double X { get; }
public double Y { get; }
public double Z { get; }
public Vector3(double x, double y, double z)
{
X = x;
Y = y;
Z = z;
}
public Vector3 CreatePoint(double dx = 0, double dy = 0, double dz = 0)
{
return new Vector3(X + dx, Y + dy, Z + dz);
}
public static Vector3 operator +(Vector3 v1, Vector3 v2)
{
return new Vector3(
v1.X + v2.X,
v1.Y + v2.Y,
v1.Z + v2.Z);
}
public static Vector3 operator -(Vector3 v1, Vector3 v2)
{
return new Vector3(
v1.X - v2.X,
v1.Y - v2.Y,
v1.Z - v2.Z);
}
public static bool operator ==(Vector3 v1, Vector3 v2)
{
return v1.Equals(v2);
}
public static bool operator !=(Vector3 v1, Vector3 v2)
{
return !(v1 == v2);
}
public static bool operator >=(Vector3 v1, Vector3 v2)
{
return v1.X >= v2.X && v1.Y >= v2.Y && v1.Z >= v2.Z;
}
public static bool operator <=(Vector3 v1, Vector3 v2)
{
return v1.X <= v2.X && v1.Y <= v2.Y && v1.Z <= v2.Z;
}
public double GetLength2()
{
return X * X + Y * Y + Z * Z;
}
[SuppressMessage("ReSharper", "CompareOfFloatsByEqualityOperator")]
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (obj.GetType() != this.GetType()) return false;
var otherVector = (Vector3) obj;
return X == otherVector.X
&& Y == otherVector.Y
&& Z == otherVector.Z;
}
public bool Equals(Vector3 otherVector, double inaccuracy)
{
return Math.Abs(X - otherVector.X) < inaccuracy
&& Math.Abs(Y - otherVector.Y) < inaccuracy
&& Math.Abs(Z - otherVector.Z) < inaccuracy;
}
public override int GetHashCode()
{
unchecked
{
var hashCode = X.GetHashCode();
hashCode = (hashCode * 397) ^ Y.GetHashCode();
hashCode = (hashCode * 397) ^ Z.GetHashCode();
return hashCode;
}
}
public override string ToString()
{
return $"[{X},{Y},{Z}]";
}
}
}