Опишите структуру Point2, соответствующую точкам на плоскости - C#
Формулировка задачи:
Здравствуйте. Помогите, пожалуйста, с решением данной задачи, используя структуру и функцию.
Помогите, пожалуйста, привести к нормальному виду, с помощью структуры и функции.
Опишите структуру Point2, соответствующую точкам на плоскости. Определите функцию, вычисляющую расстояние от некоторой точки до прямой, заданной двумя другими точками. Напишите программу, использующую эту функцию. Предусмотрите обработку исключительных ситуаций.
Я тут попытался решить по-своему, используя эту формулу: Получилось вот что:using System;
class Program
{
static void Main()
{
double x, y, x0, y0, x1, y1, d, k;
Console.Write("x=");
x = int.Parse(Console.ReadLine());
Console.Write("y=");
y = int.Parse(Console.ReadLine());
Console.Write("x0=");
x0 = int.Parse(Console.ReadLine());
Console.Write("y0=");
y0 = int.Parse(Console.ReadLine());
Console.Write("x1=");
x1 = int.Parse(Console.ReadLine());
Console.Write("y1=");
y1 = int.Parse(Console.ReadLine());
k = Math.Sqrt((Math.Pow(x1 - x0, 2)) + Math.Pow(y1 - y0, 2));
if (k == 0)
{
throw new DivideByZeroException();
}
d = ((y0 - y1) * x + (x1 - x0) * y + (x0 * y1 - x1 * y0)) / k;
Console.Write("d={0}", d);
}
}Решение задачи: «Опишите структуру Point2, соответствующую точкам на плоскости»
textual
Листинг программы
struct Vector
{
public double X;
public double Y;
public double Length
{
get { return Math.Sqrt(this * this); }
}
public Vector Normal
{
// единичный вектор перпендикулярный данному
get { return new Vector() { X = -this.Y, Y = this.X } / Length; }
}
public static Vector operator -(Vector a, Vector b)
{
return new Vector() { X = a.X - b.X, Y = a.Y - b.Y };
}
public static Vector operator/(Vector a, double b)
{
return new Vector() { X = a.X / b, Y = a.Y / b };
}
public static double operator *(Vector a, Vector b)
{
// скалярное произведение
return a.X * b.X + a.Y * b.Y;
}
}
struct Line
{
public Vector Start;
public Vector End;
public double Distance(Vector Point)
{
return Point * (End - Start).Normal ;
}
public static double Distance(Vector LineStart, Vector LineEnd, Vector Point)
{
return new Line() { Start = LineStart, End = LineEnd }.Distance(Point);
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(
new Line() {
Start = new Vector() { X = 0, Y = 0 },
End = new Vector() { X = 1, Y = 1 }
}.Distance(new Vector() { X = 0, Y = 1 }));
Console.ReadLine();
}
}