Найти две точки, образующие прямую, параллельную наибольшему количеству заданных прямых
С визуальным представлением на координатной плоскости
Формулировка задания
На плоскости задано множество точек А и множество прямых В.
Найти две различные точки из А такие, чтобы проходящая через них прямая была параллельна наибольшему количеству прямых из В.
Уравнение прямой по двум точкам
Уравнение вида 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 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, но для всех старших версий проблем с открытием быть не должно.
В крайнем случае, свяжемся и все проблемы решим…
Если у Вас остались вопросы, то задать их Вы можете, нажав на эту кнопочку .
Вывести уравнение прямой, проходящей через две точки
Задача
По координатам двух точек, которые вводит пользователь, определить уравнение прямой, проходящей через эти точки.
Решение
Алгоритм решения задачи:
Общий вид уравнения прямой имеет вид y = kx + b. Чтобы найти уравнение для конкретной прямой, необходимо вычислить коэффициенты k и b. Сделать это можно, если известны координаты двух точек, лежащих на этой прямой. В этом случае решается система уравнений:
| y1 = kx1 + b
| y2 = kx2 + b
b = y2 — kx2
y1 = kx1 + y2 — kx2
k = (y1 — y2) / (x1 — x2)
b = y2 — k*x2
Вывести уравнение прямой по координатам двух точек
По введенным пользователем координатам двух точек вывести уравнение прямой, проходящей через эти точки.
Общее уравнение прямой имеет вид y = kx + b . Для какой-то конкретной прямой в уравнении коэффициенты k и b заменяются на числа, например, y = 4x — 2 . Задача сводится именно к нахождению этих коэффициентов.
Так как координаты точки это значения x и y , то мы имеем два уравнения. Пусть, например, координаты точки А(3;2), а координаты B(-1;-1). Получаем уравнения:
2 = k*3 + b,
-1 = k*(-1) + b.
Решая полученную систему уравнений находим значения k и b :
b = 2 — 3k
-1 = -k + 2 — 3k
4k = 3
k = 3/4 = 0.75
b = 2 — 3 * 0.75 = 2 — 2.25 = -0.25
Таким образом, получается уравнение конкретной прямой, проходящей через указанные точки: y = 0.75x — 0.25.
Алгоритм решения данной задаче на языке программирования будет таков:
- Получить значения координат первой точки и присвоить их переменным, например x1 и y1 .
- Получить значения координат ( x2, y2 ) второй точки.
- Вычислить значение k по формуле k = (y1 — y2) / (x1 — x2) .
- Вычислить значение b по формуле b = y2 — k * x2 .
- Вывести на экран полученное уравнение.
http://pas1.ru/equation-line
http://gospodaretsva.com/straight.html