Найти координаты четвертой вершины прямоугольника по трем заданным - C#
Формулировка задачи:
1)Ввести целочисленные координаты трех вершин прямоугольника,
стороны которого параллельны координатным осям.
Найти координаты его четвертой вершины. Если пользователь введёт координаты точек так, что нельзя по-
лучить прямоугольник со сторонами, параллельными координатным
осям, вывести соответствующее сообщение.
Помогите пожалуйста.
Решение задачи: «Найти координаты четвертой вершины прямоугольника по трем заданным»
textual
Листинг программы
using System; namespace ConsoleApplication1 { /// <summary> /// Класс точки, представленной 2-мя координатами. /// </summary> class Point { public Point() { } public Point(int x, int y) { X = x; Y = y; } public int X { get; set; } public int Y { get; set; } public override string ToString() { return String.Format("X = {0}, Y = {1}", X, Y); } /// <summary> /// Сложение точки с вектором. Результат -точка, смещённая на заданный вектор. /// </summary> public static Point operator +(Point pt, Vector v) { return new Point(pt.X + v.X, pt.Y + v.Y); } } /// <summary> /// Класс вектора, представленный 2-мя координатами. /// </summary> class Vector { public Vector(int x, int y) { X = x; Y = y; } public Vector(Point ptStart, Point ptEnd) { X = ptEnd.X - ptStart.X; Y = ptEnd.Y - ptStart.Y; } public int X { get; set; } public int Y { get; set; } /// <summary> /// Скалярное произведение 2-х векторов. /// </summary> public static int ScalarProd(Vector v1, Vector v2) { return v1.X * v2.X + v1.Y * v2.Y; } /// <summary> /// Сложение 2-х векторов, результат - вектор. /// </summary> public static Vector operator +(Vector v1, Vector v2) { return new Vector(v1.X + v2.X, v1.Y + v2.Y); } } class Program { /// <summary> /// Вспомогательная функция для конвертации строки в экземпляр точки (Point) /// В строке через пробел должны быть записаны 2 целые координаты. /// </summary> static Point stringToPoint(string str) { string[] coordStrings = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (coordStrings.Length != 2) throw new ArgumentException("Недопустимый ввод."); Point pt = new Point(); pt.X = Int32.Parse(coordStrings[0]); pt.Y = Int32.Parse(coordStrings[1]); return pt; } static void Main(string[] args) { Point[] points = new Point[3]; // 3 точки, задаваемые пользователем. Console.WriteLine("Введите (через пробел) координаты 3-х точек предполагаемого прямоугольника: "); Console.WriteLine("Первая точка: "); points[0] = stringToPoint(Console.ReadLine()); Console.WriteLine("Вторая точка: "); points[1] = stringToPoint(Console.ReadLine()); Console.WriteLine("Третья точка: "); points[2] = stringToPoint(Console.ReadLine()); /* // Оставлено для тестирования (чтобы пропускать пользовательский ввод). points[0] = new Point(1, 2); points[1] = new Point(1, 4); points[2] = new Point(5, 4); // ptMissing = new Point(5, 2); */ /* points[0] = new Point(1, 4); points[1] = new Point(5, 4); points[2] = new Point(5, 2); // ptMissing = new Point(1, 2); */ /* points[0] = new Point(1, 2); points[1] = new Point(5, 4); points[2] = new Point(5, 2); // ptMissing = new Point(1, 4); */ /* points[0] = new Point(1, 4); points[1] = new Point(1, 2); points[2] = new Point(5, 2); // ptMissing = new Point(5, 4); */ /* points[0] = new Point(1, 4); points[1] = new Point(1, 2); points[2] = new Point(5, 1); // Не прямоугольник. */ int rightAnglePointId = -1; // Индекс точки, соответствующей прямому углу. // Скалярное произведение векторов, образующих прямой угол равно 0, // находим точку, соответствующую прямому углу. Vector v01 = new Vector(points[0], points[1]); Vector v12 = new Vector(points[1], points[2]); Vector v20 = new Vector(points[2], points[0]); if (Vector.ScalarProd(v01, v12) == 0) rightAnglePointId = 1; else if (Vector.ScalarProd(v12, v20) == 0) rightAnglePointId = 2; else if (Vector.ScalarProd(v20, v01) == 0) rightAnglePointId = 0; else { // Не обнаружили прямого угла. Console.WriteLine("Введённые точки не соответствуют прямоугольнику."); return; } // Недостающую точку находим по правилу сложения векторов: // берём имеющийся у нас один прямой угол; складываем координаты точки прямого угла и 2-х векторов, // исходящих из этой точки. Point ptMissing = new Point(); switch (rightAnglePointId) { case 0: ptMissing = points[0] + new Vector(points[0], points[1]) + new Vector(points[0], points[2]); break; case 1: ptMissing = points[1] + new Vector(points[1], points[0]) + new Vector(points[1], points[2]); break; case 2: ptMissing = points[2] + new Vector(points[2], points[1]) + new Vector(points[2], points[0]); break; } // Вывод результатов. Console.WriteLine("Введённые точки:"); foreach(Point pt in points) { Console.WriteLine(pt); } Console.WriteLine("Недостающая точка:"); Console.WriteLine(ptMissing); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д