示例#1
0
        private static Line2D GetBissektor(Point2D startBissector, Point2D leftPoint, Point2D rightPoint)
        {
//			//Достроим треугольник до равнобедренного
//			double alpha = startBissector.GetDistanceTo(leftPoint) / startBissector.GetDistanceTo(rightPoint);
//			Point2D newLeftPoint = startBissector + (1 / alpha) * (leftPoint - startBissector);
//
//			var expected = startBissector.GetDistanceTo(newLeftPoint) - startBissector.GetDistanceTo(rightPoint);
//			Assert.That(expected, Is.LessThan(0.1).And.GreaterThan(-0.1));
//
//			//Теорема. В равнобедренном треугольнике медиана == биссектрисе
//			//Утверждение: найденная медиана и будет нужной нам прямой
//
//			Point2D middle = (newLeftPoint + rightPoint) / 2;
//
//			//Но точка middle не лежит на треугольнике... найдем ту что лежит
//
//			Line2D line = new Line2D(leftPoint, rightPoint);
//			Line2D fakeBissector = new Line2D(startBissector, middle);
//
//			Point2D finishBissector = Geometry.GetCrossing(line, fakeBissector);
//			return new Line2D(startBissector, finishBissector);

            double left  = startBissector.GetDistanceTo(leftPoint);
            double right = startBissector.GetDistanceTo(rightPoint);

            double alpha = left / (left + right);

            Point2D finishBissector = leftPoint * (1 - alpha) + rightPoint * alpha;

            return(new Line2D(startBissector, finishBissector));
        }
示例#2
0
        private static bool PointOnCircle(Point2D point, Circle2D c)
        {
            const double epsilon  = 0.000001;
            double       actualyR = point.GetDistanceTo(c.Center);

            return(actualyR < c.R + epsilon && actualyR > c.R - epsilon);
        }
示例#3
0
 private static bool PointOnCircle(Point2D point, Circle2D c)
 {
     const double epsilon = 0.000001;
     double actualyR = point.GetDistanceTo(c.Center);
     return (actualyR < c.R + epsilon && actualyR > c.R - epsilon);
 }
示例#4
0
        private static Line2D GetBissektor(Point2D startBissector, Point2D leftPoint, Point2D rightPoint)
        {
//			//Достроим треугольник до равнобедренного
//			double alpha = startBissector.GetDistanceTo(leftPoint) / startBissector.GetDistanceTo(rightPoint);
//			Point2D newLeftPoint = startBissector + (1 / alpha) * (leftPoint - startBissector);
//
//			var expected = startBissector.GetDistanceTo(newLeftPoint) - startBissector.GetDistanceTo(rightPoint);
//			Assert.That(expected, Is.LessThan(0.1).And.GreaterThan(-0.1));
//
//			//Теорема. В равнобедренном треугольнике медиана == биссектрисе
//			//Утверждение: найденная медиана и будет нужной нам прямой
//
//			Point2D middle = (newLeftPoint + rightPoint) / 2;
//
//			//Но точка middle не лежит на треугольнике... найдем ту что лежит
//
//			Line2D line = new Line2D(leftPoint, rightPoint);
//			Line2D fakeBissector = new Line2D(startBissector, middle);
//
//			Point2D finishBissector = Geometry.GetCrossing(line, fakeBissector);
//			return new Line2D(startBissector, finishBissector);

            double left = startBissector.GetDistanceTo(leftPoint);
            double right = startBissector.GetDistanceTo(rightPoint);

            double alpha = left/(left + right);

            Point2D finishBissector = leftPoint*(1 - alpha) + rightPoint*alpha;

            return new Line2D(startBissector, finishBissector);
        }