public void TestCoordsDistance() { Assert.AreEqual(26.121783, GeometryCalcs.Distance(-1.5, -7, -25.345, -17.666), DOUBLE_EPSILON, "test dist coord #1"); Assert.AreEqual(5, GeometryCalcs.Distance(-2, 1, 2, -2), "test dist coord #2"); }
public void TestPointDistance() { Assert.AreEqual(3.5, GeometryCalcs.Distance(new Point(0, 0), new Point(3.5, 0)), "test dist #1"); Assert.AreEqual(4.75, GeometryCalcs.Distance(new Point(-1, -3), new Point(-1, 1.75)), "test dist #2"); }
/// <summary> /// Данные треугольника, который не является прямоугольным и /// не является равносторонним. /// Стороны должны быть заданы в отсортированном виде /// </summary> /// <param name="side1">Первая сторона (самая короткая)</param> /// <param name="side2">Вторая сторона (средняя по длине)</param> /// <param name="side3">Третья сторона (самая длинная)</param> public SemiScaleneTriangleData(double side1, double side2, double side3) : base(side1, side2, side3) { Debug.Assert(side1 > 0, "Triangle side 1 must be positive"); Debug.Assert(side2 > 0, "Triangle side 2 must be positive"); Debug.Assert(side3 > 0, "Triangle side 3 must be positive"); Debug.Assert(GeometryCalcs.TriangleExists(side1, side2, side3), "Triangle must exist"); Debug.Assert(side1 <= side2 && side2 <= side3, "Triangle sides must be sorted"); }
/// <summary> /// Инифиулизирует треугольник /// </summary> /// <param name="vertices">Массив из трёх точек-вершин треугольника</param> public void Init(Point[] vertices) { Debug.Assert(vertices != null && vertices.Length == 3, "Triangle must be determined by 3 vertices"); double a = GeometryCalcs.Distance(vertices[0], vertices[1]); double b = GeometryCalcs.Distance(vertices[1], vertices[2]); double c = GeometryCalcs.Distance(vertices[2], vertices[0]); _Init(new double[] { a, b, c }); }
/// <summary> /// Данные прямоугольного треугольника /// </summary> /// <param name="cathetus1">Первый катет</param> /// <param name="cathetus2">Второй катет</param> /// <param name="hypotenuse">Гипотенуза</param> public RightAngledTriangleData(double cathetus1, double cathetus2, double hypotenuse) : base(cathetus1, cathetus2, hypotenuse) { Debug.Assert(cathetus1 > 0, "Triangle cathetus 1 must be positive"); Debug.Assert(cathetus2 > 0, "Triangle cathetus 2 must be positive"); Debug.Assert(hypotenuse > 0, "Triangle hypotenuse must be positive"); Debug.Assert(cathetus1 <= hypotenuse && cathetus2 <= hypotenuse, "Invalid sides"); Debug.Assert(GeometryCalcs.TriangleIsRightAngled(cathetus1, cathetus2, hypotenuse), "This class must be used for right-angled triangle"); }
/// <summary> /// Данные обычного (не равностороннего) треугольника, заданного тремя сторонами /// </summary> /// <param name="cathetus1">Первая сторона</param> /// <param name="cathetus2">Вторая сторона</param> /// <param name="hypotenuse">Третья сторона</param> protected AllSidesInfoTriangleData(double side1, double side2, double side3) { Debug.Assert(side1 > 0, "Triangle side 1 must be positive"); Debug.Assert(side2 > 0, "Triangle side 2 must be positive"); Debug.Assert(side3 > 0, "Triangle side 3 must be positive"); Debug.Assert(GeometryCalcs.TriangleExists(side1, side2, side3), "Triangle must exist"); Debug.Assert(!GeometryCalcs.TriangleIsEquilateral(side1, side2, side3), "This class must be used for non-equilateral triangle"); this.side1 = side1; this.side2 = side2; this.side3 = side3; }
/// <summary> /// Инициализация треугольника по трём сторонам /// </summary> /// <param name="sides">Массив из трёх длин сторон</param> private void _Init(double[] sides) { // могут быть заданы "плохие" точки, из-за которых стороны нулевые // проверка <= на всякий случай foreach (double side in sides) { if (side <= 0) { return; } } // если треугольник с такими сторонами не существует, // это некорректно заданная команда if (GeometryCalcs.TriangleExists(sides[0], sides[1], sides[2])) { t = new Triangle(sides[0], sides[1], sides[2]); } }
public void TestCoordsMidPoint() { Assert.AreEqual(new Point(0.5, -1.5), GeometryCalcs.Midpoint(-4.5, -3, 5.5, 0), "midpoint coords #1"); }
/// <summary> /// Команда вычисления расстояния между точками /// </summary> /// <param name="a">Первая точка</param> /// <param name="b">Вторая точка</param> public DistanceCommand(Point a, Point b) { result = GeometryCalcs.Distance(a, b); }