Вам нужно решить 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)
(как у вертикального сегмента на втором изображении)
Этот алгоритмможно рассматривать как простой вид обрезки строки по прямоугольнику