Из заданного на плоскости множества точек выбрать три различные точки - C#
Формулировка задачи:
привет всем) помогите исправить код задачи.
задача: Из заданного на плоскости множества точек выбрать три различные точки так, чтобы разность между площадью круга, ограниченного окружностью, проходящей через эти три точки, и площадью треугольника с вершинами в этих точках была минимальной.
выводит всегда ноль.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double[] X1 = new double[1000];
double[] Y1 = new double[1000];
double[] X2 = new double[1000];
double[] Y2 = new double[1000];
double[] X3 = new double[1000];
double[] Y3 = new double[1000];
double[] E = new double[1000];
int i, n, m, k, d,z;
int l = 0;
Console.Write("Введите n: ");
n = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите m: ");
m = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите k: ");
k = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Kоординаты точек:");
Random rand1 = new Random(n);
for (i = 0; i < n; i++)
{
X1[i] = rand1.Next(0, 10);
Console.Write(X1[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < n; i++)
{
Y1[i] = rand1.Next(0, 10);
Console.Write(Y1[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < m; i++)
{
X2[i] = rand1.Next(0, 10);
Console.Write(X2[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < m; i++)
{
Y2[i] = rand1.Next(0, 10);
Console.Write(Y2[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < k; i++)
{
X3[i] = rand1.Next(0, 10);
Console.Write(X2[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < k; i++)
{
Y3[i] = rand1.Next(0, 10);
Console.Write(Y2[i] + " ");
}
Console.WriteLine(' ');
double P; // Полупериметр
double A, B, C; ; // Длины сторон треугольника
double STreug; // Площадь треугольника
double SKrug;// Площадь описанного круга
A = Math.Sqrt((X2[i] - X1[i]) * (X2[i] - X1[i]) + (Y2[i] - Y1[i]) * (Y2[i] - Y1[i]));
B = Math.Sqrt((X3[i] - X2[i]) * (X2[i] - X2[i]) + (Y3[i] - Y2[i]) * (Y3[i] - Y2[i]));
C = Math.Sqrt((X3[i] - X1[i]) * (X3[i] - X1[i]) + (Y3[i] - Y1[i]) * (Y3[i] - Y1[i]));
P = (A + B + C) / 2;
// Площадь треугольника по формуле Герона
STreug = Math.Sqrt(P * (P - A) * (P - B) * (P - C));
// Площадь круга описанного возле треугольника Pi * (R^2)
SKrug = (3.14 * (A * B * C / (STreug * 4)) * (A * B * C / (STreug * 4)));
for (i = 1; i < n; i++)
{
for (d = 1; d < n - 1; d++)
{
for (z = 1; z < n - 2; z++)
{
if ((X1[i] != X1[d]) && (X1[d] != X1[z]) && (Y1[i] != Y1[d]) && (Y1[d] != Y1[z]))
{
// Разность площадей
double Result = SKrug - STreug;
E[l] = Result;
l = l + 1;
double Min = E[1];
for (i = 1; i < l; i++)
{
if (E[l] < Min)
Min = E[i];
}
Console.WriteLine(Min);
}
}
}
}
Console.ReadLine();
}
}
}Решение задачи: «Из заданного на плоскости множества точек выбрать три различные точки»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double[] X1 = new double[1000];
double[] Y1 = new double[1000];
double[] X2 = new double[1000];
double[] Y2 = new double[1000];
double[] X3 = new double[1000];
double[] Y3 = new double[1000];
double[] E = new double[1000];
int i, n, m, k, d,z;
int l = 0;
Console.Write("Введите n: ");
n = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите m: ");
m = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите k: ");
k = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Kоординаты точек:");
Random rand1 = new Random(n);
for (i = 0; i < n; i++)
{
X1[i] = rand1.Next(0, 10);
Console.Write(X1[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < n; i++)
{
Y1[i] = rand1.Next(0, 10);
Console.Write(Y1[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < m; i++)
{
X2[i] = rand1.Next(0, 10);
Console.Write(X2[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < m; i++)
{
Y2[i] = rand1.Next(0, 10);
Console.Write(Y2[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < k; i++)
{
X3[i] = rand1.Next(0, 10);
Console.Write(X2[i] + " ");
}
Console.WriteLine(' ');
for (i = 0; i < k; i++)
{
Y3[i] = rand1.Next(0, 10);
Console.Write(Y2[i] + " ");
}
Console.WriteLine(' ');
double P; // Полупериметр
double A, B, C; ; // Длины сторон треугольника
double STreug; // Площадь треугольника
double SKrug;// Площадь описанного круга
A = Math.Sqrt((X2[i] - X1[i]) * (X2[i] - X1[i]) + (Y2[i] - Y1[i]) * (Y2[i] - Y1[i]));
B = Math.Sqrt((X3[i] - X2[i]) * (X2[i] - X2[i]) + (Y3[i] - Y2[i]) * (Y3[i] - Y2[i]));
C = Math.Sqrt((X3[i] - X1[i]) * (X3[i] - X1[i]) + (Y3[i] - Y1[i]) * (Y3[i] - Y1[i]));
P = (A + B + C) / 2;
// Площадь треугольника по формуле Герона
STreug = Math.Sqrt(P * (P - A) * (P - B) * (P - C));
// Площадь круга описанного возле треугольника Pi * (R^2)
SKrug = (3.14 * (A * B * C / (STreug * 4)) * (A * B * C / (STreug * 4)));
for (i = 1; i < n; i++)
{
for (d = 1; d < n - 1; d++)
{
for (z = 1; z < n - 2; z++)
{
if ((X1[i] != X1[d]) && (X1[d] != X1[z]) && (Y1[i] != Y1[d]) && (Y1[d] != Y1[z]))
{
// Разность площадей
double Result = SKrug - STreug;
E[l] = Result;
l = l + 1;
double Min = E[1];
for (i = 1; i < l; i++)
{
if (E[l] < Min)
Min = E[i];
}
Console.WriteLine(Min);
}
}
}
}
Console.ReadLine();
}
}
}