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

public final class VolumesBD
extends java.lang.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 Summary

    Modifier and Type Method Description
    static VolumeBD containing​(VolumeBD a, VolumeBD b)
    Construct a volume that will contain both a and b.
    static boolean contains​(VolumeBD a, VolumeBD b)
    Determine whether or not one volume contains another.
    static boolean containsPoint​(VolumeBD a, java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z)
    Determine whether or not a volume contains a given point.
    static boolean couldFitInside​(VolumeBD a, VolumeBD b)
    Determine whether or not one volume could fit inside another.
    static VolumeBD create​(java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z, java.math.BigDecimal size_x, java.math.BigDecimal size_y, java.math.BigDecimal size_z)
    Create a volume of size (size_x, size_y, size_z) placing the minimum corner at (x, y, z).
    static VolumeBD moveAbsolute​(VolumeBD volume, java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z)
    Move the given volume to (x, y, z).
    static VolumeBD moveRelative​(VolumeBD volume, java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z)
    Move the given volume by (x, y, z).
    static VolumeBD moveRelativeClamped​(VolumeBD container, VolumeBD volume, java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z)
    Move the given volume by (x, y, z), without allowing volume to leave container.
    static VolumeBD moveRelativeClampedX​(VolumeBD container, VolumeBD volume, java.math.BigDecimal x)
    Move the given volume by x, without allowing volume to leave container.
    static VolumeBD moveRelativeClampedY​(VolumeBD container, VolumeBD volume, java.math.BigDecimal y)
    Move the given volume by y, without allowing volume to leave container.
    static VolumeBD moveRelativeClampedZ​(VolumeBD container, VolumeBD volume, java.math.BigDecimal z)
    Move the given volume by z, without allowing volume to leave container.
    static VolumeBD moveToOrigin​(VolumeBD volume)
    Move the given volume to (0, 0, 0).
    static boolean overlaps​(VolumeBD a, VolumeBD b)
    Determine whether or not two volumes overlap.
    static java.lang.String show​(VolumeBD volume)  
    static java.lang.String showToBuilder​(VolumeBD volume, java.lang.StringBuilder sb)  
    static VolumeSizeBD size​(VolumeBD volume)  
    static VolumeXYZSplitBD<VolumeBD> splitAtXYZ​(VolumeBD v, java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z)
    Split the given volume at point (x, y, z).

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • create

      public static VolumeBD create​(java.math.BigDecimal x, java.math.BigDecimal y, java.math.BigDecimal z, java.math.BigDecimal size_x, java.math.BigDecimal size_y, java.math.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, java.math.BigDecimal x, java.math.BigDecimal y, java.math.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, java.math.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, java.math.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, java.math.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, java.math.BigDecimal x, java.math.BigDecimal y, java.math.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, java.math.BigDecimal x, java.math.BigDecimal y, java.math.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, java.math.BigDecimal x, java.math.BigDecimal y, java.math.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, java.math.BigDecimal x, java.math.BigDecimal y, java.math.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 java.lang.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 java.lang.String showToBuilder​(VolumeBD volume, java.lang.StringBuilder sb)
      Parameters:
      volume - The volume
      sb - A string builder
      Returns:
      A terse string describing the position and size of the volume