точки задаются с помощью компонента 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 = "нет вершин квадрата!";
}