Файл: toolkit/geometry/Point.php
Строк: 104
<?php
/**
* @package geometry
* @author Антон Кургузенков <kurguzenkov@list.ru>
*
* @version 0.01
* @since 2012-11-09
*/
require_once 'exceptions.php';
/**
* Класс, описываюший точку на плоскости.
*/
class Point {
/**
* Координата x точки
*
* @var int
*/
private $x;
/**
* Координата y точки
*
* @var int
*/
private $y;
/**
* @param int
* @param int
* @throws IllegalArgumentException
*/
public function __construct($x, $y) {
$this->setX($x);
$this->setY($y);
}
/**
* Смещает точку на указанную точку, складывая их координаты.
* Метод возвращает смещённую точку.
*
* @param Point
* @return Point
*/
public function offset(Point $p) {
$this->setX($this->getX() + $p->getX());
$this->setY($this->getY() + $p->getY());
return $this;
}
/**
* Складывает координаты точки с координатами точки или высотой и шириной
* размера и возвращяет новую точку.
*
* @param Point
* @param Point|Size
* @return Point
* @throws IllegalArgumentException
*/
public static function add(Point $p, $obj) {
if ($obj instanceof Point) {
return new Point($p->getX() + $obj->getX(), $p->getY() + $obj->getY());
} else if ($obj instanceof Size) {
return new Point($p->getX() + $obj->getWidth(), $p->getY() + $obj->getHeight());
}
throw new IllegalArgumentException();
}
/**
* Вычитает из координат точки координаты другой точки или
* высоту и ширину размера.
*
* @param Point
* @param Point|Size
* @return Point
* @throws IllegalArgumentException
*/
public static function subtract(Point $p, $obj) {
if ($obj instanceof Point) {
return self::add($p, new Point(-$obj->getX(), -$obj->getY()));
} else if ($obj instanceof Size) {
return self::add($p, new Point(-$obj->getWidth(), -$obj->getHeight()));
}
throw new IllegalArgumentException();
}
/**
* Сравнивает две точки
*
* @param Point
* @return boolean
*/
public function equals(Point $p) {
return $this->getX() == $p->getX() && $this->getY() == $p->getY();
}
public function getX() {
return $this->x;
}
public function getY() {
return $this->y;
}
/**
* @param int
* @throws IllegalArgumentException
*/
public function setX($x) {
if (is_integer($x)) {
$this->x = $x;
} else {
throw new IllegalArgumentException();
}
}
/**
* @param int
* @throws IllegalArgumentException
*/
public function setY($y) {
if (is_integer($y)) {
$this->y = $y;
} else {
throw new IllegalArgumentException();
}
}
public function __toString() {
return "{x: {$this->x}, y: {$this->y}}";
}
}
?>