java.lang.Object
com.io7m.jregions.core.unparameterized.volumes.VolumesBD

public final class VolumesBD extends Object

Functions over volumes.

These functions operate using the concepts of minimum-x, maximum-x, minimum-y, maximum-y, minimum-z, maximum-z, edges. It is up to individual applications to assign meaning to these edges such as "left" for minimum-x, "top" for minimum-y, or "far" for minimum-z.

  • Method Details

    • create

      public static VolumeBD create(BigDecimal x, BigDecimal y, BigDecimal z, BigDecimal size_x, BigDecimal size_y, BigDecimal size_z)
      Create a volume of size (size_x, size_y, size_z) placing the minimum corner at (x, y, z).
      Parameters:
      x - The X value of the minimum corner
      y - The Y value of the minimum corner
      z - The Z value of the minimum corner
      size_x - The size of the volume on the X axis
      size_y - The size of the volume on the Y axis
      size_z - The size of the volume on the Z axis
      Returns:
      A volume
    • contains

      public static boolean contains(VolumeBD a, VolumeBD b)

      Determine whether or not one volume contains another.

      Containing is reflexive: contains(a, a) == true.

      Containing is transitive: contains(a, b) → contains(b, c) → contains(a, c).

      Containing is not necessarily symmetric.

      Parameters:
      a - Volume A
      b - Volume B
      Returns:
      true iff a contains b
    • moveRelative

      public static VolumeBD moveRelative(VolumeBD volume, BigDecimal x, BigDecimal y, BigDecimal z)
      Move the given volume by (x, y, z).
      Parameters:
      volume - The volume
      x - The amount to move on the X axis
      y - The amount to move on the Y axis
      z - The amount to move on the Z axis
      Returns:
      A moved volume
    • moveRelativeClampedX

      public static VolumeBD moveRelativeClampedX(VolumeBD container, VolumeBD volume, BigDecimal x)
      Move the given volume by x, without allowing volume to leave container.
      Parameters:
      container - The container volume
      volume - The volume
      x - The amount to move on the X axis
      Returns:
      A moved volume
      Since:
      3.0.0
    • moveRelativeClampedY

      public static VolumeBD moveRelativeClampedY(VolumeBD container, VolumeBD volume, BigDecimal y)
      Move the given volume by y, without allowing volume to leave container.
      Parameters:
      container - The container volume
      volume - The volume
      y - The amount to move on the Y axis
      Returns:
      A moved volume
      Since:
      3.0.0
    • moveRelativeClampedZ

      public static VolumeBD moveRelativeClampedZ(VolumeBD container, VolumeBD volume, BigDecimal z)
      Move the given volume by z, without allowing volume to leave container.
      Parameters:
      container - The container volume
      volume - The volume
      z - The amount to move on the Z axis
      Returns:
      A moved volume
      Since:
      3.0.0
    • moveRelativeClamped

      public static VolumeBD moveRelativeClamped(VolumeBD container, VolumeBD volume, BigDecimal x, BigDecimal y, BigDecimal z)
      Move the given volume by (x, y, z), without allowing volume to leave container.
      Parameters:
      container - The container volume
      volume - The volume
      x - The amount to move on the X axis
      y - The amount to move on the Y axis
      z - The amount to move on the Z axis
      Returns:
      A moved volume
      Since:
      3.0.0
    • moveAbsolute

      public static VolumeBD moveAbsolute(VolumeBD volume, BigDecimal x, BigDecimal y, BigDecimal z)
      Move the given volume to (x, y, z).
      Parameters:
      volume - The volume
      x - The position to which to move on the X axis
      y - The position to which to move on the Y axis
      z - The position to which to move on the Z axis
      Returns:
      A moved volume
    • moveToOrigin

      public static VolumeBD moveToOrigin(VolumeBD volume)
      Move the given volume to (0, 0, 0).
      Parameters:
      volume - The volume
      Returns:
      A moved volume
    • overlaps

      public static boolean overlaps(VolumeBD a, VolumeBD b)

      Determine whether or not two volumes overlap.

      Overlapping is reflexive: overlaps(a, a) == true.

      Overlapping is symmetric: overlaps(a, b) == overlaps(b, a).

      Overlapping is not necessarily transitive.

      Parameters:
      a - A volume
      b - A volume
      Returns:
      true iff a overlaps b
    • couldFitInside

      public static boolean couldFitInside(VolumeBD a, VolumeBD b)

      Determine whether or not one volume could fit inside another.

      Fitting is reflexive: couldFitInside(a, a) == true.

      Fitting is transitive: couldFitInside(a, b) → couldFitInside(b, c) → couldFitInside(a, c).

      Fitting is not necessarily symmetric.

      Parameters:
      a - A volume
      b - A volume
      Returns:
      true iff a could fit inside b
    • containing

      public static VolumeBD containing(VolumeBD a, VolumeBD b)
      Construct a volume that will contain both a and b.
      Parameters:
      a - A volume
      b - A volume
      Returns:
      A volume containing a and b
    • containsPoint

      public static boolean containsPoint(VolumeBD a, BigDecimal x, BigDecimal y, BigDecimal z)

      Determine whether or not a volume contains a given point.

      Parameters:
      a - A volume
      x - The X coordinate of the point
      y - The Y coordinate of the point
      z - The Z coordinate of the point
      Returns:
      true iff a contains (x, y, z)
    • splitAtXYZ

      public static VolumeXYZSplitBD<VolumeBD> splitAtXYZ(VolumeBD v, BigDecimal x, BigDecimal y, BigDecimal z)

      Split the given volume at point (x, y, z).

      Parameters:
      v - A volume
      x - The X coordinate of the point
      y - The Y coordinate of the point
      z - The Z coordinate of the point
      Returns:
      true iff a contains (x, y, z)
    • show

      public static String show(VolumeBD volume)
      Parameters:
      volume - The volume
      Returns:
      A terse string describing the position and size of the volume
    • size

      public static VolumeSizeBD size(VolumeBD volume)
      Parameters:
      volume - The volume
      Returns:
      The size of the volume
    • showToBuilder

      public static String showToBuilder(VolumeBD volume, StringBuilder sb)
      Parameters:
      volume - The volume
      sb - A string builder
      Returns:
      A terse string describing the position and size of the volume