Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек - C#
Формулировка задачи:
Доброго вечер.
Помогите, пожалуйста, с задачей:
А основной части создал массив для ввода точек:
Но не могу понять, как их правильно проверять ? Т.е. как сравнивать две точки из этого массива для нахождения симметричных ? У нас есть методы Get_x() и Get_y(), но не совсем понимаю, как с ними работать
Дано множество A из N точек на плоскости. Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек с максимальным расстоянием между ними (вывести их номера и значения). Если таких точек нет, то вывести соответствующее сообщение.
Для решения есть класс Point:using System; using System.Collections.Generic; using System.Text; namespace Планиметрия { class Point:Figure { // Конструкторы: public Point() { Console.WriteLine("Работает конструктор класса Point без параметров"); reality=true; FigureSizes= new double [2]; FigureSizes[0]=0; FigureSizes[1]=0; } public Point(Point Ob) { Console.WriteLine("Работает конструктор-копировщик класса Point "); reality = true; FigureSizes = new double[2]; FigureSizes[0] = Ob.FigureSizes[0]; FigureSizes[1] = Ob.FigureSizes[1]; } public Point(double x, double y) { Console.WriteLine("Работает конструктор класса Point с 2-мя параметрами"); reality = true; FigureSizes = new double[2]; FigureSizes[0] = x; FigureSizes[1] = y; } // Свойства: public double koord_x { get { return FigureSizes[0]; } set { FigureSizes[0] = value; } } public double koord_y { get { return FigureSizes[1]; } set { FigureSizes[1] = value; } } public void show() { Console.WriteLine("x = {0:0.##} ,y = {1:0.##}", FigureSizes[0], FigureSizes[1]); } public static Point operator +(Point T1, Point T2) { Point Trez = new Point(T1.koord_x+T2.koord_x, T1.koord_y+T2.koord_y); return Trez; } public static Point operator -(Point T1, Point T2) { Point Trez = new Point(T1.koord_x - T2.koord_x, T1.koord_y -T2.koord_y); return Trez; } public static bool operator == (Point T1, Point T2) { if ((T1.koord_x == T2.koord_x) && (T1.koord_y == T2.koord_y)) { return true; } else return false; } public static bool operator != (Point T1, Point T2) { if ((T1.koord_x != T2.koord_x) || (T1.koord_y != T2.koord_y)) { return true; } else return false; } public override bool Equals(object obj) { if (obj ==null || !(obj is Point)) return false; else return this==(Point) obj; } public override int GetHashCode() { return ToString().GetHashCode(); } public void Input_Point() { Console.WriteLine("Введите координаты точки: "); FigureSizes[0] = Double.Parse(Console.ReadLine()); FigureSizes[1] = Double.Parse(Console.ReadLine()); } public double Get_x() { return FigureSizes[0]; } public double Get_y() { return FigureSizes[1]; } public void Set_x(double a) { FigureSizes[0] = a; } public void Set_y(double a) { FigureSizes[1] = a; } public bool Rawni_li(Point Ob) { return FigureSizes[0] == Ob.FigureSizes[0] && FigureSizes[1] == Ob.FigureSizes[1]; } public void Copy(Point Ob) { FigureSizes[0] = Ob.FigureSizes[0]; FigureSizes[1] = Ob.FigureSizes[1]; } public void Get_x_y(ref double x, ref double y) { FigureSizes[0] = this.FigureSizes[0]; FigureSizes[1] = this.FigureSizes[1]; } public void Swap(ref Point Ob1, ref Point Ob2) { Point T = Ob1; Ob1 = Ob2; Ob2 = T; } public Point Uwelich_tchk(int koef) { return new Point(FigureSizes[0] * koef, FigureSizes[1] * koef); } public static Point operator +(Point Ob, int z) { return new Point(Ob.FigureSizes[0] + z, Ob.FigureSizes[1] + z); } public static Point operator +(int z, Point Ob) { return new Point(Ob.FigureSizes[0] + z, Ob.FigureSizes[1] + z); } public static Point operator -(Point Ob) { return new Point(-Ob.FigureSizes[0], -Ob.FigureSizes[1]); } public static Point operator ++(Point Ob) { Ob.FigureSizes[0]++; Ob.FigureSizes[1]++; return Ob; } public static Point operator --(Point Ob) { Ob.FigureSizes[0]--; Ob.FigureSizes[1]--; return Ob; } public static bool operator <(Point T1, Point T2) { double d1 = Math.Sqrt(T1.FigureSizes[0] * T1.FigureSizes[0] + T1.FigureSizes[1] * T1.FigureSizes[1]); double d2 = Math.Sqrt(T2.FigureSizes[0] * T2.FigureSizes[0] + T2.FigureSizes[1] * T2.FigureSizes[1]); if (d1 < d2) return true; else return false; } public static bool operator >(Point T1, Point T2) { double d1 = Math.Sqrt(T1.FigureSizes[0] * T1.FigureSizes[0] + T1.FigureSizes[1] * T1.FigureSizes[1]); double d2 = Math.Sqrt(T2.FigureSizes[0] * T2.FigureSizes[0] + T2.FigureSizes[1] * T2.FigureSizes[1]); if (d1 > d2) return true; else return false; } } }
int i, n; Console.WriteLine("Введите количество точек: "); n = Int32.Parse(Console.ReadLine()); Point[] mas = new Point[n]; for (i = 0; i < n; i++) { mas[i] = new Point(); mas[i].Input_Point(); } Console.WriteLine("Содержимое массива точек: "); for (i = 0; i < n; i++) { mas[i].show(); }
Решение задачи: «Среди всех точек этого множества найти пару симметричных относительно оси ОХ точек»
textual
Листинг программы
using System; using System.Linq; using System.Collections.Generic; class Program { private static Random rnd = new Random(); public static void Main() { HashSet<Tuple<int, int>> points = new HashSet<Tuple<int, int>>(); while (points.Count != 100) { points.Add(Tuple.Create(rnd.Next(-10, 11), rnd.Next(-10, 11))); } List<Tuple<int, int>> mirrored = points.Where(p => p.Item2 != 0 && points.Contains(Tuple.Create(p.Item1, -p.Item2))).ToList(); mirrored.ForEach(Console.WriteLine); Console.WriteLine(); Console.WriteLine(mirrored.OrderByDescending(p => p.Item2).FirstOrDefault()); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д