Даны N точек на плоскости...

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
siberian_lynx
Сообщения: 3
Зарегистрирован: 19 апр 2011, 14:11

реализовать программу надо в C#
точки задаются с помощью компонента datagridview (dgv)

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

примерный код но он выдает повторяющиеся вершины

Код: Выделить всё

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int N;
        public Form1()
        {
            InitializeComponent();
        }

        

        private void nud_ValueChanged(object sender, EventArgs e)
        {
            N = (int)nud.Value;
            dgv.RowCount = N;
            dgv.ColumnCount = 2;
        }

        private void button_Click(object sender, EventArgs e)
        {
            tB.Clear();
            double stor1, stor2, stor3, stor4;
            double diag1, diag2;
            double[,] 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(dgv[0, i].Value);
                A[1, i] = Convert.ToDouble(dgv[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)
                        {
                            stor1 = 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)
                                        {
                                            stor2 = 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 (stor1 == stor2 && stor1 > 0)
                                            {
                                                stor3 = 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]));
                                                stor4 = 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 (stor2 == stor3 && stor2 == stor4)
                                                {
                                                    diag1 = 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]));
                                                    diag2 = 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 (diag1 == diag2)
                                                    {
                                                        //C[0, p] = i; C[1, p] = j; C[2, p] = t; C[3, p] = u;
                                                        p++;
                                                        tB.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;

                                                    }
                                                }
                                            }
                                        }
                                    }
                            }
                        }
                    }
            }
            if (tB.Text == " ")
               tB.Text = "нет вершин квадрата!";

      
        }
Ответить