Я бы предложил преобразовать линию в параметрический формат вместо точечного наклона. То есть параметрическая функция для линии возвращает точки вдоль этой линии для значения некоторого параметра t. Вы можете представить линию в качестве контрольной точки и вектор, представляющий направление линии, проходящей через эту точку. Таким образом, вы просто перемещаетесь на d единиц вперед и назад от точки А, чтобы получить другие ваши очки.
Поскольку ваша линия имеет наклон 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
Используется vector math . В частности, скалярное умножение вектора (вашего параметра t и вектора N) и сложение вектора (A и t * N). Результатом функции f является точка вдоль прямой. 2 точки, которые вы ищете, это f (d) и f (-d). Реализуйте это на языке по вашему выбору.
Преимущество использования этого метода, в отличие от всех других ответов, состоит в том, что вы можете легко расширить этот метод для поддержки линии с "бесконечным" наклоном. То есть вертикальная линия, такая как x = 3. Вам не нужен наклон, все, что вам нужно, это нормализованный вектор направления. Для вертикальной линии это <0, 1>. Вот почему в графических операциях часто используется векторная математика, потому что вычисления более просты и менее подвержены особенностям.
Сначала это может показаться немного сложным, но как только вы научитесь работать с векторными операциями, многие задачи компьютерной графики станут намного проще.