Создание класса треугольник и сопутствующих методов - 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);
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы