Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
Point3.cs
浏览该文件的文档.
1namespace Engine {
2 public struct Point3 : IEquatable<Point3> {
3 public int X;
4
5 public int Y;
6
7 public int Z;
8
9 public static readonly Point3 Zero = default;
10
11 public static readonly Point3 One = new(1, 1, 1);
12
13 public static readonly Point3 UnitX = new(1, 0, 0);
14
15 public static readonly Point3 UnitY = new(0, 1, 0);
16
17 public static readonly Point3 UnitZ = new(0, 0, 1);
18
19 public Point3(int v) {
20 X = v;
21 Y = v;
22 Z = v;
23 }
24
25 public Point3(int x, int y, int z) {
26 X = x;
27 Y = y;
28 Z = z;
29 }
30
31 public Point3(Vector3 v) {
32 X = (int)v.X;
33 Y = (int)v.Y;
34 Z = (int)v.Z;
35 }
36
37 public static implicit operator Point3((int X, int Y, int Z) v) => new(v.X, v.Y, v.Z);
38
39 public override int GetHashCode() => X + Y + Z;
40
41 public override bool Equals(object obj) => obj is Point3 && Equals((Point3)obj);
42
43 public bool Equals(Point3 other) => other.X == X && other.Y == Y && other.Z == Z;
44
45 public override string ToString() => $"{X},{Y},{Z}";
46
47 public static int Dot(Point3 p1, Point3 p2) => p1.X * p2.X + p1.Y * p2.Y + p1.Z * p2.Z;
48
49 public static Point3 Cross(Point3 p1, Point3 p2) => new(p1.Y * p2.Z - p1.Z * p2.Y, p1.Z * p2.X - p1.X * p2.Z, p1.X * p2.Y - p1.Y * p2.X);
50
51 public static Point3 Min(Point3 p, int v) => new(MathUtils.Min(p.X, v), MathUtils.Min(p.Y, v), MathUtils.Min(p.Z, v));
52
53 public static Point3 Min(Point3 p1, Point3 p2) => new(MathUtils.Min(p1.X, p2.X), MathUtils.Min(p1.Y, p2.Y), MathUtils.Min(p1.Z, p2.Z));
54
55 public static Point3 Max(Point3 p, int v) => new(MathUtils.Max(p.X, v), MathUtils.Max(p.Y, v), MathUtils.Max(p.Z, v));
56
57 public static Point3 Max(Point3 p1, Point3 p2) => new(MathUtils.Max(p1.X, p2.X), MathUtils.Max(p1.Y, p2.Y), MathUtils.Max(p1.Z, p2.Z));
58
59 public static int MinElement(Point3 p) => MathUtils.Min(p.X, p.Y, p.Z);
60
61 public static int MaxElement(Point3 p) => MathUtils.Max(p.X, p.Y, p.Z);
62
63 public static bool operator ==(Point3 p1, Point3 p2) => p1.Equals(p2);
64
65 public static bool operator !=(Point3 p1, Point3 p2) => !p1.Equals(p2);
66
67 public static Point3 operator +(Point3 p) => p;
68
69 public static Point3 operator -(Point3 p) => new(-p.X, -p.Y, -p.Z);
70
71 public static Point3 operator +(Point3 p1, Point3 p2) => new(p1.X + p2.X, p1.Y + p2.Y, p1.Z + p2.Z);
72
73 public static Point3 operator -(Point3 p1, Point3 p2) => new(p1.X - p2.X, p1.Y - p2.Y, p1.Z - p2.Z);
74
75 public static Point3 operator *(int n, Point3 p) => new(p.X * n, p.Y * n, p.Z * n);
76
77 public static Point3 operator *(Point3 p, int n) => new(p.X * n, p.Y * n, p.Z * n);
78
79 public static Point3 operator *(Point3 p1, Point3 p2) => new(p1.X * p2.X, p1.Y * p2.Y, p1.Z * p2.Z);
80
81 public static Point3 operator /(Point3 p, int n) => new(p.X / n, p.Y / n, p.Z / n);
82
83 public static Point3 operator /(Point3 p1, Point3 p2) => new(p1.X / p2.X, p1.Y / p2.Y, p1.Z / p2.Z);
84
85 public unsafe Span<int> AsSpan() {
86 fixed (int* ptr = &X) {
87 return new Span<int>(ptr, 3);
88 }
89 }
90
91 public unsafe int* AsPointer() {
92 fixed (int* ptr = &X) {
93 return ptr;
94 }
95 }
96
97 public static implicit operator Vector3(Point3 p) => new(p.X, p.Y, p.Z);
98
99 public static Point3 Round(Vector3 v) => new((int)MathF.Round(v.X), (int)MathF.Round(v.Y), (int)MathF.Round(v.Z));
100
101 public static Point3 Round(float x, float y, float z) => new((int)MathF.Round(x), (int)MathF.Round(y), (int)MathF.Round(z));
102
103 public static Point3 Ceiling(Vector3 v) => new((int)MathF.Ceiling(v.X), (int)MathF.Ceiling(v.Y), (int)MathF.Ceiling(v.Z));
104
105 public static Point3 Ceiling(float x, float y, float z) => new((int)MathF.Ceiling(x), (int)MathF.Ceiling(y), (int)MathF.Ceiling(z));
106
107 public static Point3 Floor(Vector3 v) => new((int)MathF.Floor(v.X), (int)MathF.Floor(v.Y), (int)MathF.Floor(v.Z));
108
109 public static Point3 Floor(float x, float y, float z) => new((int)MathF.Floor(x), (int)MathF.Floor(y), (int)MathF.Floor(z));
110 }
111}
unsafe
定义 Main.cs:15
Engine.Vector3 Vector3
static int Min(int x1, int x2)
static int Max(int x1, int x2)
Point3(int x, int y, int z)
unsafe int * AsPointer()
unsafe Span< int > AsSpan()
static Point3 Cross(Point3 p1, Point3 p2)
override string ToString()
static bool operator==(Point3 p1, Point3 p2)
static int Dot(Point3 p1, Point3 p2)
override bool Equals(object obj)
bool Equals(Point3 other)
static Point3 Max(Point3 p1, Point3 p2)
static int MaxElement(Point3 p)
static Point3 Floor(Vector3 v)
static Point3 Min(Point3 p, int v)
static Point3 Ceiling(float x, float y, float z)
Point3(Vector3 v)
static Point3 operator+(Point3 p)
static Point3 Max(Point3 p, int v)
static Point3 Round(float x, float y, float z)
static readonly Point3 Zero
static int MinElement(Point3 p)
static Point3 Ceiling(Vector3 v)
static readonly Point3 UnitY
static bool operator!=(Point3 p1, Point3 p2)
static Point3 operator-(Point3 p)
static Point3 operator*(int n, Point3 p)
static Point3 Min(Point3 p1, Point3 p2)
static readonly Point3 UnitX
static readonly Point3 UnitZ
static Point3 operator/(Point3 p, int n)
static Point3 Floor(float x, float y, float z)
static readonly Point3 One
override int GetHashCode()
static Point3 Round(Vector3 v)