/** * @param Point $a * @param Point $b * * @return Line */ public static function combineToRisingLine(Point $a, Point $b) { $minX = min($a->getX(), $b->getX()); $maxX = max($a->getX(), $b->getX()); $minY = min($a->getY(), $b->getY()); $maxY = max($a->getY(), $b->getY()); return new self(new Point($minX, $minY), new Point($maxX, $maxY)); }
/** * @param Point $a * @param Point $b * * @return LinearFunction * * @throws \RuntimeException When $a and $b points have same x */ public static function fromTwoPoints(Point $a, Point $b) { if ($a->getX() === $b->getX()) { throw new \RuntimeException('Line can be defined only by two points with different X'); } $k = ($a->getY() - $b->getY()) / ($a->getX() - $b->getX()); $n = $a->getY() - $k * $a->getX(); return new self($k, $n); }
/** * @param PointSet $result * @param Point $a * @param Point $b */ private function addRow(PointSet $result, Point $a, Point $b) { if ($a->getX() > $b->getX()) { $t = $a; $a = $b; $b = $t; } if ($this->fill) { foreach ($a->forXUpTo($b) as $x) { $this->addPoint($result, new Point($x, $a->getY())); } } else { $this->addPoint($result, $a); $this->addPoint($result, $b); } }