Найти две точки, образующие прямую, параллельную наибольшему количеству заданных прямых

На тему "Геометрия"

  1. Формулировка задания
  2. Уравнение прямой по двум точкам
  3. Перебор множеств точек и прямых
  4. Визуальное представление на Координатной плоскости
  5. Случайная генерация множест точек и прямых
  6. Исходный код на C#

С визуальным представлением на координатной плоскости


Формулировка задания


звучит так:

На плоскости задано множество точек А и множество прямых В.
Найти две различные точки из А такие, чтобы проходящая через них прямая была параллельна наибольшему количеству прямых из В.

Найти две точки, образующие прямую, параллельную наибольшему количеству заданных прямых
Рис.1        Найти две точки, образующие прямую, параллельную наибольшему количеству заданных прямых





Уравнение прямой по двум точкам


Уравнение вида y(x) = y0 + k * x ,
где k = (dy/dx) = тангенс угла наклона прямой,
а y0 - значение функции при х=0 (точка пересечения прямой с осью оХ)

найти легко…

k = (y2 - y1)/(x2 - x1)
y0 = y1 - k*x1 (или y0 = y2 - k*x2)




Перебор множеств точек и прямых


Перебор множества точек «А» следует выполнять в двух циклах, так как точки рассматриваются парами.

Из пары точек получить прямую tmpLine (ее параметры - как, описано выше). Для определения параллельности необходимо сравнить k (наклон) прямой tmpLine и каждой прямой из множества «B».

//------------------------------
for (int i = 0; i < siz1-1; i++){
    p1 = arrPoints[i];
    for (int j = i + 1; j < siz1; j++) //перебор пар точек
    {
       p2 = arrPoints[j];
       tmpLine = new geoLine(p1, p2);
       cou = 0;
       for (int k = 0; k < siz2; k++)//перебор заданныx линий
       {
          if (tmpLine.k == arrLines[k].k) cou++;//подсчет параллельных прямых
       }

       if (cou > maxTim) // зафиксировать лучший результат
       {
          pA = p1; pB=p2; //пара точек образующих lineAnswer
          lineAnswer = tmpLine;
          maxTim = cou;
       }
    }
}
//------------------------------




Визуальное представление на Координатной плоскости


Координатная плоскость (из школькой программы) и координатная плоскость формы Windows (c её параметрами left, top в пикселях) отличаются друг от друга, но математическими преобразованиями всегда можно связать любые две координатные системы отсчета.

Т.е. необходимо решить подзадачу: из имеющихся координат точки (любой) в системе_1, получить координаты этой же точки в системе_2.

В программном коде это решение представлено. Тестируйте…



Случайная генерация множест точек и прямых


Чтобы не утруждать пользователя вводом координат точек и параметров прямых - множество точек «А» и прямых «B» генерируются случайным образом.

//------------------------------
siz1 = (int)numericUpDown1.Value; siz2 = (int)numericUpDown2.Value; //размеры массивов для точек и прямых
arrPoints = new Point[siz1]; //cоздается массив нужного размера для хранения точек
arrLines = new geoLine[siz2];//cоздается массив нужного размера для хранения объектов "прямые линии"
Random rnd = new Random();
//заполнить массивы точек и прямых линий
//------------------------------




Исходный код на C#


Данный код написан на Visual Studio 2012, но для всех старших версий проблем с открытием быть не должно.

В крайнем случае, свяжемся и все проблемы решим…

скачать ехе-файл для тестирования


Условия получения готового кода?    Показать?


Другие примеры на тему «Математические методы компьютерной 2D 3D графики»

Другие примеры на языках «C»,«C++»,«C#»





Если у Вас остались вопросы, то задать их Вы можете, нажав на эту кнопочку ...




Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...
исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
исходный код комментарии цена минимальная


Не попадайтесь на удочку мошенников-кидал...
Сайт помощи студентам по программированию и информатике

Program code