我有一个问题,我知道一条直线的斜率(m)和它上面的一个点A(x,y)。如何计算距离点A(实际上是两个点)距离为d的这条直线上的点?? 我是为了找到通过点A(x,y)的像素强度而问这个问题,其中距离指的是像素数。
我有一个问题,我知道一条直线的斜率(m)和它上面的一个点A(x,y)。如何计算距离点A(实际上是两个点)距离为d的这条直线上的点?? 我是为了找到通过点A(x,y)的像素强度而问这个问题,其中距离指的是像素数。
magnitude = (1^2 + m^2)^(1/2)标准化方向向量是N。现在您就快做完了。您只需要用参数化格式编写您的行方程:
N = <1, m> / magnitude = <1 / magnitude, m / magnitude>
f(t) = A + t*N这使用vector math。具体来说,scalar vector multiplication(您的参数t和向量N)和vector addition(A和t*N)。函数f的结果是沿着该行的一点。您正在寻找的2个点是f(d)和f(-d)。使用您选择的语言实现它。
起点 - (x0, y0)
终点 - (x1, y1)
我们需要找到距离起点(x0, y0)
一定距离dt
处于起点和终点之间的一个点(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)
。
import numpy as np
def get_point_on_vector(initial_pt, terminal_pt, distance):
v = np.array(initial_pt, dtype=float)
u = np.array(terminal_pt, dtype=float)
n = v - u
n /= np.linalg.norm(n, 2)
point = v - distance * n
return tuple(point)
基于数学堆栈交换网站上@Theophile的出色答案(此处)。
我们将要寻找的点称为P,它的坐标为px、py,起始点A的坐标为ax和ay。斜率m就是Y变化量与X变化量的比值,因此如果你的点P距离A的距离为s,则其坐标为px = ax + s,py = ay + m * s。现在使用勾股定理,从A到P的距离d将为d = sqrt(s * s + (m * s) * (m * s))。为了使P距离A特定的D单位,找到s的值为s = D/sqrt(1 + m * m)。