Add comments
This commit is contained in:
parent
15b215010b
commit
d3517a86fb
@ -1,7 +1,18 @@
|
|||||||
namespace MindBox.Lib;
|
namespace MindBox.Lib;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Абстрактный класс, реализующий интерфейс двумерной фигуры.
|
||||||
|
/// Посчитал нужным создать отдельный абстрактный класс, это более гибкое решение.
|
||||||
|
/// Такой класс можно расширить другими интерфейсами, например IColorful - контракт для методов получения и/или изменения цвета фигуры.
|
||||||
|
/// Прочие интерфейсы могут быть применимы не только к двумерным фигурам
|
||||||
|
/// </summary>
|
||||||
public abstract class FlatShape : ITwoDimensional
|
public abstract class FlatShape : ITwoDimensional
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Поле для хранения вычисляемого значения площади.
|
||||||
|
/// Вычисляем значение только один раз.
|
||||||
|
/// </summary>
|
||||||
protected double? _area;
|
protected double? _area;
|
||||||
public abstract double GetArea();
|
public abstract double GetArea();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
namespace MindBox.Lib;
|
namespace MindBox.Lib;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Интерфейс для методов, которые можно применить для двумерной фигуры.
|
||||||
|
/// Можно впоследствии дополнить методами вычисления периметра, etc
|
||||||
|
/// </summary>
|
||||||
public interface ITwoDimensional
|
public interface ITwoDimensional
|
||||||
{
|
{
|
||||||
public double GetArea();
|
public double GetArea();
|
||||||
|
@ -2,6 +2,7 @@ namespace MindBox.Lib;
|
|||||||
|
|
||||||
public class Triangle : FlatShape
|
public class Triangle : FlatShape
|
||||||
{
|
{
|
||||||
|
// Может потребоваться хранить разные стороны в разных полях, но для нашей задачи это избыточно
|
||||||
private readonly double[] _sides;
|
private readonly double[] _sides;
|
||||||
|
|
||||||
public Triangle(double a, double b, double c)
|
public Triangle(double a, double b, double c)
|
||||||
@ -16,6 +17,9 @@ public class Triangle : FlatShape
|
|||||||
throw new ArgumentException($"Sides lengths are not valid: {a}, {b}, {c}");
|
throw new ArgumentException($"Sides lengths are not valid: {a}, {b}, {c}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Вычисление площади реугольника по формуле Герона
|
||||||
|
/// </summary>
|
||||||
public override double GetArea()
|
public override double GetArea()
|
||||||
{
|
{
|
||||||
if (_area != null)
|
if (_area != null)
|
||||||
@ -31,14 +35,16 @@ public class Triangle : FlatShape
|
|||||||
(semiPerimeter - _sides[2]));
|
(semiPerimeter - _sides[2]));
|
||||||
return _area.Value;
|
return _area.Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public bool IsRight()
|
public bool IsRight()
|
||||||
{
|
{
|
||||||
var sorted = _sides.OrderByDescending(x => x);
|
var sorted = _sides.OrderByDescending(x => x);
|
||||||
|
|
||||||
|
// Самая длинная сторона: гипотенуза
|
||||||
double hypotenuse = sorted.First();
|
double hypotenuse = sorted.First();
|
||||||
|
// Две другие - катеты
|
||||||
var catheti = sorted.Skip(1);
|
var catheti = sorted.Skip(1);
|
||||||
|
|
||||||
return hypotenuse * hypotenuse == catheti.Sum(x => x * x);
|
return hypotenuse * hypotenuse == catheti.Sum(x => x * x);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user