20 public BoundingBox(
float x1,
float y1,
float z1,
float x2,
float y2,
float z2) {
31 ArgumentNullException.ThrowIfNull(points);
34 foreach (
Vector3 point
in points) {
35 Min.X = MathF.Min(
Min.X, point.
X);
36 Min.Y = MathF.Min(
Min.Y, point.
Y);
37 Min.Z = MathF.Min(
Min.Z, point.
Z);
38 Max.X = MathF.Max(
Max.X, point.
X);
39 Max.Y = MathF.Max(
Max.Y, point.
Y);
40 Max.Z = MathF.Max(
Max.Z, point.
Z);
42 if (
Min.X ==
float.PositiveInfinity) {
43 throw new ArgumentException(
"points");
47 public static implicit
operator BoundingBox((
float X1,
float Y1,
float Z1,
float X2,
float Y2,
float Z2) v) =>
48 new(v.X1, v.Y1, v.Z1, v.X2, v.Y2, v.Z2);
54 public override string ToString() => $
"{Min},{Max}";
64 return vector.X * vector.Y * vector.
Z;
67 public bool Contains(
Vector3 p) => p.X >= Min.X && p.X <= Max.X && p.Y >= Min.Y && p.Y <= Max.Y && p.Z >= Min.Z && p.Z <=
Max.Z;
74 && box.Min.Z <=
Max.Z;
102 num += (sphere.Center.Z -
Max.Z) * (sphere.
Center.
Z -
Max.Z);
104 return num <= sphere.Radius * sphere.
Radius;
110 return !(max.X > min.
X) || !(max.
Y > min.
Y) || !(max.Z > min.
Z) ?
default :
new BoundingBox(min, max);
129 return MathF.Sqrt(num * num + num2 * num2 + num3 * num3);
139 new(b.Min.X, b.Min.Y, b.Min.Z),
140 new(b.Max.X, b.Min.Y, b.Min.Z),
141 new(b.Min.X, b.Max.Y, b.Min.Z),
142 new(b.Max.X, b.Max.Y, b.Min.Z),
143 new(b.Min.X, b.Min.Y, b.Max.Z),
144 new(b.Max.X, b.Min.Y, b.Max.Z),
145 new(b.Min.X, b.Max.Y, b.Max.Z),
146 new(b.Max.X, b.Max.Y, b.Max.Z)
static int Max(int x1, int x2)
BoundingBox(Vector3 min, Vector3 max)
BoundingBox(IEnumerable< Vector3 > points)
static float Distance(BoundingBox b, Vector3 p)
static BoundingBox Transform(BoundingBox b, Matrix m)
override string ToString()
static BoundingBox Union(BoundingBox b1, BoundingBox b2)
bool Intersection(BoundingBox box)
bool Intersection(BoundingSphere sphere)
static bool operator==(BoundingBox a, BoundingBox b)
BoundingBox(float x1, float y1, float z1, float x2, float y2, float z2)
bool Equals(BoundingBox other)
static BoundingBox Union(BoundingBox b, Vector3 p)
static bool operator!=(BoundingBox a, BoundingBox b)
override int GetHashCode()
override bool Equals(object obj)
static BoundingBox Intersection(BoundingBox b1, BoundingBox b2)
static void Transform(ref BoundingBox b, ref Matrix m, out BoundingBox result)
IEnumerable< Vector3 > Corners
static Vector3 Transform(Vector3 v, Matrix m)
static Vector3 Max(Vector3 v, float f)
static Vector3 Min(Vector3 v, float f)