У меня вопрос, я знаю строку, я просто знаю ее наклон (m) и точку на ней A (x, y) Как я могу вычислить точки (фактически два из них) на этой линии с расстоянием (d) от точки A ??? Я прошу об этом, чтобы найти интенсивность пикселей на линии, проходящей через A (x, y) с расстоянием. В этом случае сопротивление будет числом пикселей.Найти точки на линии с заданным расстоянием
ответ
Я бы предложил преобразовать линию в параметрический формат вместо наклона точки. То есть параметрическая функция для линии возвращает точки вдоль этой строки для значения некоторого параметра 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
Это использует vector math. В частности, scalar vector multiplication (от вашего параметра t и вектора N) и vector addition (от A и t * N). Результат функции f является точкой вдоль линии. 2 пункта, которые вы ищете, - это f (d) и f (-d). Реализуйте это на выбранном вами языке.
Преимущество использования этого метода, в отличие от всех других ответов до сих пор, заключается в том, что вы можете легко расширить этот метод для поддержки линии с «бесконечным» наклоном. То есть, вертикальная линия, такая как x = 3. Вам действительно не нужен наклон, все, что вам нужно, это нормализованный вектор направления. Для вертикальной линии это < 0, 1>. Вот почему графические операции часто используют векторную математику, потому что вычисления более прямые и менее подвержены особенностям. Сначала это может показаться немного сложным, но как только вы получите зависание векторных операций, многие задачи компьютерной графики становятся намного проще.
Назовем точку, в которой вы пытаетесь найти P, с координатами px, py и вашей начальной точкой A - координатами ax и ay. Наклон m является просто отношением изменения Y по изменению X, поэтому, если ваша точка P является расстоянием s от A, то его координаты равны px = ax + s, а py = ay + m * s. Теперь, используя Pythagoras, расстояние d от A до P будет d = sqrt (s * s + (m * s) * (m * s)). Чтобы сделать Р единицей А из A, найдите s как s = D/sqrt (1 + m * m).
Я думал, что это было удивительным и легко понять решение:
http://www.physicsforums.com/showpost.php?s=f04d131386fbd83b7b5df27f8da84fa1&p=2822353&postcount=4
Let me explain the answer in a simple way.
Начальная точка - (x0, y0)
Конечная точка - (x1, y1)
Нам нужно найти точку (xt, yt)
на расстоянии сИ от начальной точки к конечной точке.
Расстояние между начальной и конечной точкой задается d = sqrt((x1 - x0)^2 + (y1 - y0)^2)
Пусть отношение расстояний, t = dt/d
Тогда точка (xt, yt) = (((1 - t) * x0 + t * x1), ((1 - t) * y0 + t * y1))
Когда 0 < t < 1
, точка находится на линия.
Когда t < 0
, точка находится за пределами линии рядом с (x0, y0)
.
Когда t > 1
, точка находится за пределами линии рядом с (x1, y1)
.
спасибо за помощь, она работает – Emre
@ALevy Вы вводите переменную «A», но я не вижу, что такое «A». Что за'? –
@TomAuger Я представил A во вступительном параграфе этого ответа. A - точка на линии. Неважно, в какой точке. Любая точка, находящаяся на линии, будет делать. –