Задача на геометрическое построение - C#
Формулировка задачи:
Дан отрезок а, длиной равной сумме длин стороны некоторого квадрата и его
диагонали. Постройте квадрат по этим данным так, чтобы его вершина А была расположена
в начале координат, а сам квадрат полностью располагался в I-ом квадранте.
Спецификации ввода (файл Inlet.in)
Xa1 Ya1
Xa2 Ya2
Спецификации вывода (файл Outlet.out)
XA YA
XB YB
XC YC
XD YD
Решение задачи: «Задача на геометрическое построение»
textual
Листинг программы
static void Main(string[] args)
{
//Чтение строк из файла
string[] text = File.ReadLines("Inlet.in").ToArray();
//Разбиваем по пробелу первую строку
string[] line = text[0].Split();
//Координаты первой точки
var pt1 = new PointF(
float.Parse(line[0], CultureInfo.InvariantCulture), float.Parse(line[1], CultureInfo.InvariantCulture));
//Разбиваем по пробелу вторую строку
line = text[1].Split();
//Координаты второй точки
var pt2 = new PointF(
float.Parse(line[0], CultureInfo.InvariantCulture), float.Parse(line[1], CultureInfo.InvariantCulture));
//Заданный вектор
var v = new PointF(pt2.X - pt1.X, pt2.Y - pt1.Y);
//Длина вектора
var len = Math.Sqrt(v.X * v.X + v.Y * v.Y);
//Вычисляем длину стороны квадрата
var side = (float) (len / (4 + Math.Sqrt(2)));
//Вершины квадрата
PointF[] square =
{
new PointF(),
new PointF(side, 0),
new PointF(side, side),
new PointF(0, side)
};
//Записываем результат
using (var writer = new StreamWriter("Outlet.out"))
{
foreach (var pointF in square)
writer.WriteLine(
"{0} {1}", pointF.X.ToString("f2", CultureInfo.InvariantCulture),
pointF.Y.ToString("f2", CultureInfo.InvariantCulture));
}
//Выводим файл на экран
Console.WriteLine("Исходные данные (Inlet.in):");
Console.WriteLine(File.ReadAllText("Inlet.in"));
Console.WriteLine("Результат (Outlet.out):");
Console.WriteLine(File.ReadAllText("Outlet.out"));
}