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)); }
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); }
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); }
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); }