Ответ 1
Я бы предложил преобразовать строку в параметрический формат вместо наклона точки. То есть параметрическая функция для линии возвращает точки вдоль этой строки для значения некоторого параметра t. Вы можете представлять линию в качестве опорной точки, и вектор, представляющий направление линии, проходящей через эту точку. Таким образом, вы просто перемещаете d единиц вперед и назад из точки A, чтобы получить свои другие очки.
Так как ваша линия имеет наклон m, ее вектор направления равен < 1, m > . Поскольку он перемещает m пикселей в y для каждого 1 пикселя в x. Вы хотите нормализовать вектор направления, чтобы быть единичной длиной, чтобы вы разделили на величину вектора.
magnitude = (1^2 + m^2)^(1/2) N = <1, m> / magnitude = <1 / magnitude, m / magnitude>
Нормализованный вектор направления - N. Теперь вы почти закончили. Вам просто нужно написать уравнение для вашей линии в параметризованном формате:
f(t) = A + t*N
Здесь используется векторная математика. В частности, скалярное векторное умножение (вашего параметра t и вектор N) и векторное дополнение (от A и t * N). Результат функции f является точкой вдоль линии. 2 пункта, которые вы ищете, - это f (d) и f (-d). Реализуйте это на выбранном вами языке.
Преимущество использования этого метода, в отличие от всех других ответов до сих пор, заключается в том, что вы можете легко расширить этот метод для поддержки линии с "бесконечным" наклоном. То есть, вертикальная линия, такая как x = 3. Вам действительно не нужен наклон, все, что вам нужно, это нормализованный вектор направления. Для вертикальной линии это & lt; 0, 1 > . Вот почему графические операции часто используют векторную математику, потому что вычисления более прямые и менее подвержены особенностям. Сначала это может показаться немного сложным, но как только вы получите зависание векторных операций, многие задачи компьютерной графики становятся намного проще.