Создание класса треугольник и сопутствующих методов - C#
Формулировка задачи:
Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и вращения на заданный угол. Описать свойства для получения состояния объекта. При невозможности построения треугольника выбрасывается исключение
Подскажите, люди добрые. Застрял уже после написания конструктора
Решение задачи: «Создание класса треугольник и сопутствующих методов»
textual
Листинг программы
using System; using System.Drawing.Drawing2D; struct Point2F : IEquatable<Point2F> { public readonly float X; public readonly float Y; public Point2F(float X, float Y) { this.X = X; this.Y = Y; } public static float Length(Point2F obj1, Point2F obj2) { return (float)Math.Sqrt((obj2.X - obj1.X) * (obj2.X - obj1.X) + (obj2.Y - obj1.Y) * (obj2.Y - obj1.Y)); } public override bool Equals(object obj) { if (obj is Point2F) return Equals((Point2F)obj); return base.Equals(obj); } public static bool operator ==(Point2F first, Point2F second) { if ((object)first == null) return (object)second == null; return first.Equals(second); } public static bool operator !=(Point2F first, Point2F second) { return !(first == second); } public bool Equals(Point2F other) { if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return this.X.Equals(other.X) && this.Y.Equals(other.Y); } public override int GetHashCode() { unchecked { int hashCode = 47; hashCode = (hashCode * 53) ^ X.GetHashCode(); hashCode = (hashCode * 53) ^ Y.GetHashCode(); return hashCode; } } public override string ToString() { return $"({this.X}, {this.Y})"; } } class Triangle { public Point2F A { get; private set; } public Point2F B { get; private set; } public Point2F C { get; private set; } public Triangle(Point2F A, Point2F B, Point2F C) { this.A = A; this.B = B; this.C = C; float lenAB = Point2F.Length(this.A, this.B); float lenBC = Point2F.Length(this.B, this.C); float lenAC = Point2F.Length(this.A, this.C); if (!(lenAB < lenAC + lenBC || lenAC < lenAB + lenBC || lenBC < lenAB + lenAC)) throw new ArgumentException("Triangle does not exist."); } public Triangle Scale(float scaleX, float scaleY) { this.A = this.scale(this.A, scaleX, scaleY); this.B = this.scale(this.B, scaleX, scaleY); this.C = this.scale(this.C, scaleX, scaleY); return this; } public Triangle Rotate(float angle) { this.A = this.rotate(this.A, angle); this.B = this.rotate(this.B, angle); this.C = this.rotate(this.C, angle); return this; } public Triangle Shift( float dx, float dy) { this.A = this.shift(this.A, dx, dy); this.B = this.shift(this.B, dx, dy); this.C = this.shift(this.C, dx, dy); return this; } private Point2F shift( Point2F point, float dx, float dy) { return new Point2F(point.X + dx, point.Y + dy); } private Point2F rotate(Point2F point, float angle) { var pointToMatrix = convertPointToMatrix(point); pointToMatrix.Rotate(angle); return convertMatrixToPoint(pointToMatrix); } private Point2F scale(Point2F point, float scaleX, float scaleY) { var pointToMatrix = convertPointToMatrix(point); pointToMatrix.Scale(scaleX, scaleY); return convertMatrixToPoint(pointToMatrix); } private Matrix convertPointToMatrix(Point2F point) { return new Matrix(point.X, 0f, point.Y, 0, 0, 0); } private Point2F convertMatrixToPoint(Matrix matrix) { return new Point2F(matrix.Elements[0], matrix.Elements[2]); } public override string ToString() { return $"{this.A}, {this.B}, {this.C}"; } } class Program { static void Main() { Triangle abc = new Triangle(new Point2F(1, 1), new Point2F(2, 2), new Point2F(0, 2)); abc.Shift(1, 1).Scale(2, 2).Rotate(45); Console.WriteLine(abc); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д