Опишите структуру 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();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы