Точки на плоскости, нахождение квадрата - C#

Узнай цену своей работы

Формулировка задачи:

Такая задача: Даны N точек на плоскости(N>=4). Выяснить, найдутся ли среди этих точек такие, которые являются вершинами квадрата. Найти стороны этого квадрата. Можете объяснить способ нахождения вершин квадрата и его сторон?

Решение задачи: «Точки на плоскости, нахождение квадрата»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Семистровая_задача_5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int N;
        double[,] A;
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            N = (int)numericUpDown1.Value;
            dataGridView1.RowCount = N;
            dataGridView1.ColumnCount = 2;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            double[] B = new double[6];
            int[,] C = new int[4,N];
            A = new double[2, N];
            int j1 = -1, t1 = -1, u1 = -1, p=0;
            for (int i = 0; i < N; i++)
            {
                A[0, i] = Convert.ToDouble(dataGridView1[0, i].Value);
                A[1, i] = Convert.ToDouble(dataGridView1[1, i].Value);
            }
 
            for (int i = 0; i < N; i++)
            {
                if (i != j1 && i != t1 && i != u1)
                for (int j = 0; j < N; j++)
                {
                    if (j != i && j != t1 && j != u1)
                    B[0] = Math.Sqrt((A[0, i] - A[0, j]) * (A[0, i] - A[0, j]) + (A[1, i] - A[1, j]) * (A[1, i] - A[1, j]));
                    for (int t = 0; t < N; t++)
                    {
                        if (t != i && t != j)
                        for (int u = 0; u < N; u++)
                        {
                            if (u != i && u != j && u != t)
                            {
                                B[1] = Math.Sqrt((A[0, t] - A[0, u]) * (A[0, t] - A[0, u]) + (A[1, t] - A[1, u]) * (A[1, t] - A[1, u]));
                                if (B[0] == B[1] && B[0]>0)
                                {
                                    B[2] = Math.Sqrt((A[0, i] - A[0, u]) * (A[0, i] - A[0, u]) + (A[1, i] - A[1, u]) * (A[1, i] - A[1, u]));
                                    B[3] = Math.Sqrt((A[0, j] - A[0, t]) * (A[0, j] - A[0, t]) + (A[1, j] - A[1, t]) * (A[1, j] - A[1, t]));
                                    if (B[1] == B[2] && B[1] == B[3])
                                    {
                                        B[4] = Math.Sqrt((A[0, i] - A[0, t]) * (A[0, i] - A[0, t]) + (A[1, i] - A[1, t]) * (A[1, i] - A[1, t]));
                                        B[5] = Math.Sqrt((A[0, j] - A[0, u]) * (A[0, j] - A[0, u]) + (A[1, j] - A[1, u]) * (A[1, j] - A[1, u]));
                                        if (B[4] == B[5])
                                        {
                                            C[0, p] = i; C[1, p] = j; C[2, p] = t; C[3, p] = u;
                                            p++;
                                            //textBox1.Text += "Найден квадрат, его вершины " + "А(" + A[0, i] + "," + A[1, i] + "),  " + "B(" + A[0, j] + "," + A[1, j] + "),  " + "C(" + A[0, t] + "," + A[1, t] + "),  " + "D(" + A[0, u] + "," + A[1, u] + "). " + "\r\n";
                                            j1 = j; t1 = t; u1 = u;
 
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
 
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < N; j++)
                    for (int l = 0; l < N;l++)
                        if (C[0, j] == C[i, l])
                        {
                            for (i = 0; i < 4; i++)
                                if (C[1, j] == C[i, l])
                                {
                                    for (i = 0; i < 4; i++)
                                        if (C[2, j] == C[i, l])
                                        {
                                            for (i = 0; i < 4; i++)
                                                if (C[3, j] == C[i, l])
                                                {
// Попытка избавления от повтора вывода вершин квадрата 
                                                }
                                        }
                                }
                        }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Random r;
            r = new Random();
            for (int i = 0; i < N; i++)
                for (int j = 0; j < N; j++)
                {
                    dataGridView1[0, i].Value = (double)r.Next(-10, 10);
                    dataGridView1[1, i].Value = (double)r.Next(-10, 10);
                }
        }
    }
}

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


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

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

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