Added AxisAlignedBB::getMixedBoundingBox() (?)

This commit is contained in:
Shoghi Cervantes 2014-03-02 23:32:48 +01:00
parent df20467f3b
commit 12ddf530b1

View File

@ -43,53 +43,73 @@ class AxisAlignedBB{
$this->maxX = $maxX; $this->maxX = $maxX;
$this->maxY = $maxY; $this->maxY = $maxY;
$this->maxZ = $maxZ; $this->maxZ = $maxZ;
return $this;
} }
public function addCoord($x, $y, $z){ public function addCoord($x, $y, $z){
$vec = clone $this;
if($x < 0){ if($x < 0){
$this->minX += $x; $vec->minX += $x;
}elseif($x > 0){ }elseif($x > 0){
$this->maxX += $x; $vec->maxX += $x;
} }
if($y < 0){ if($y < 0){
$this->minY += $y; $vec->minY += $y;
}elseif($y > 0){ }elseif($y > 0){
$this->maxY += $y; $vec->maxY += $y;
} }
if($z < 0){ if($z < 0){
$this->minZ += $z; $vec->minZ += $z;
}elseif($z > 0){ }elseif($z > 0){
$this->maxZ += $z; $vec->maxZ += $z;
} }
return $vec;
} }
public function expand($x, $y, $z){ public function expand($x, $y, $z){
$this->minX -= $x; $vec = clone $this;
$this->minY -= $y; $vec->minX -= $x;
$this->minZ -= $z; $vec->minY -= $y;
$this->maxX += $x; $vec->minZ -= $z;
$this->maxY += $y; $vec->maxX += $x;
$this->maxZ += $z; $vec->maxY += $y;
$vec->maxZ += $z;
return $vec;
} }
public function offset($x, $y, $z){ public function offset($x, $y, $z){
$this->minX += $x; $vec = clone $this;
$this->minY += $y; $vec->minX += $x;
$this->minZ += $z; $vec->minY += $y;
$this->maxX += $x; $vec->minZ += $z;
$this->maxY += $y; $vec->maxX += $x;
$this->maxZ += $z; $vec->maxY += $y;
$vec->maxZ += $z;
return $vec;
} }
public function contract($x, $y, $z){ public function contract($x, $y, $z){
$this->minX += $x; $vec = clone $this;
$this->minY += $y; $vec->minX += $x;
$this->minZ += $z; $vec->minY += $y;
$this->maxX -= $x; $vec->minZ += $z;
$this->maxY -= $y; $vec->maxX -= $x;
$this->maxZ -= $z; $vec->maxY -= $y;
$vec->maxZ -= $z;
return $vec;
}
public function getMixedBoundingBox(AxisAlignedBB $bb){
return new AxisAlignedBB(
min($this->minX, $bb->minX),
min($this->minY, $bb->minY),
min($this->minZ, $bb->minZ),
max($this->maxX, $bb->maxX),
max($this->maxY, $bb->maxY),
max($this->maxZ, $bb->maxZ)
);
} }
public function getOffsetBoundingBox($x, $y, $z){ public function getOffsetBoundingBox($x, $y, $z){