Определить «крайние» точки по уравнению прямой - PullRequest
0 голосов
/ 13 декабря 2018

Для данной строки уравнения y = mx + c, где m - градиент, а c - y-перехват.Как бы я определял «граничные точки» на графике?

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

Example graph

Точки обведены красным.Для определения краевых точек здесь было бы просто (0, c) & (maximum x-value, m * maximum x-value + c).Однако проблема возникает, когда я рассматриваю строки с другим значением m.Например:

enter image description here

Я не могу применить ту же логику здесь, вместо этого крайние точки будут ((maximum y-value - c) * m, maximum y-value) & (-c * m, 0), который был получен изуравнение y = mx + c.Итак, мой вопрос: как бы я определил эти 2 крайние точки с учетом любых m или c?Есть ли здесь какой-то определенный шаблон, которого я не вижу?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Чтобы строка находилась в данном прямоугольнике, существует ограничение, заданное значениями x, и ограничение, заданное значениями y.

Ограничение x тривиально приводит к интервалу, в котором значения x должныbe.

Ограничение y также дает такой интервал для значений x, но только после некоторого простого вычисления.

Теперь определите пересечение двух интервалов (которые также могут быть пустыми).

0 голосов
/ 13 декабря 2018

Вам нужно решить 4 простых линейных уравнения (не системы уравнений!):

y = m * 0 + c = c
y = m * maxX + c
0 = m * x + c
maxY = m * x + c

и получить точки пересечения с осями и с максимальными линиями.Затем отфильтруйте точки с отрицательными и слишком большими координатами, потому что вам нужен только 1-й квадрант

Первое уравнение уже решено y=c
Второе дает точку пересечения с правой вертикальной линией
Третий дает точку пересечения с осью OX
Четвертый дает точку пересечения с верхней горизонтальной линией

Пример:

maxX = 5
maxY = 5
line  y = 2 *x - 1
x0, y0 = 0, -1
x1, y1 = 5, 9
x2, y2 = 1/2, 0
x3, y3 = 2, 5

Первая пара содержит отрицательную координату y=-1
Вторая пара содержит y=9 > maxY
Третий и четвертый выполняют ваши ограничения.

Таким образом, эта линия дает сегмент (1/2, 0)-(2, 5) (как у вертикального сегмента на втором изображении)

Этот алгоритмможно рассматривать как простой вид обрезки строки по прямоугольнику

...