/** * Test if a point is part of the disc ([O->a] <= r) * * @param \Maths\PointInterface $a * @return bool */ public function isValidPoint(PointInterface $a) { $s = new Segment($this->getPointO(), $a); return (bool) ($s->getLength() <= $this->getRadius()); }
/** * Test if two segments are parallels * * This will test if the two lines drawn from the two segments verify the Thales theorem * by comparing [ab] (segment 1), [cd] (segment 2) and a fifth point [e] used to build * triangles: * * [ae]/[ce] == [be]/[de] ? * * @param \Maths\Geometry\Line $line1 * @param \Maths\Geometry\Line $line2 * @return bool */ public static function areParallels(Line $line1, Line $line2) { if ($line1->isHorizontal() && $line2->isHorizontal() || $line1->isVertical() && $line2->isVertical()) { return true; } $line1->rearrange(); $line2->rearrange(); $abs = array($line1->getPointA()->getAbscissa(), $line1->getPointB()->getAbscissa(), $line2->getPointA()->getAbscissa(), $line2->getPointB()->getAbscissa()); $ords = array($line1->getPointA()->getOrdinate(), $line1->getPointB()->getOrdinate(), $line2->getPointA()->getOrdinate(), $line2->getPointB()->getOrdinate()); $e = new Point(rand(0, 10) + (max($abs) + abs(min($abs))), rand(0, 10) + (max($ords) + abs(min($ords)))); $segAE = new Segment($line1->getPointA(), $e); $segBE = new Segment($line1->getPointB(), $e); $intersectCE = self::getLinesIntersection($segAE, $line2); $segCE = new Segment($intersectCE, $e); $intersectDE = self::getLinesIntersection($segBE, $line2); $segDE = new Segment($intersectDE, $e); /* echo <<<TYPEOTHER var demo1 = brd.create('point', [{$line1->getPointA()->x},{$line1->getPointA()->y}], { name: 'a' }); var demo2 = brd.create('point', [{$line1->getPointB()->x},{$line1->getPointB()->y}], { name: 'b' }); var segment1 = brd.create('line', [demo1,demo2], {straightFirst:false,straightLast:false}); var demo3 = brd.create('point', [{$intersectCE->x},{$intersectCE->y}], { name: 'c' }); var demo4 = brd.create('point', [{$intersectDE->x},{$intersectDE->y}], { name: 'd' }); var segment2 = brd.create('line', [demo3,demo4], {straightFirst:false,straightLast:false}); var demo5 = brd.create('point', [{$e->x},{$e->y}], { name: 'e' }); var segment3 = brd.create('line', [demo1,demo5], {straightFirst:false,straightLast:false,color:'#404040'}); var segment4 = brd.create('line', [demo2,demo5], {straightFirst:false,straightLast:false,color:'#404040'}); var segment5 = brd.create('line', [demo3,demo5], {straightFirst:false,straightLast:false,color:'#404040'}); var segment6 = brd.create('line', [demo4,demo5], {straightFirst:false,straightLast:false,color:'#404040'}); TYPEOTHER; */ return (bool) ($segAE->getLength() / $segCE->getLength() == $segBE->getLength() / $segDE->getLength()); }