我在python中工作,我之前有(x_prev,y_prev) = (1.5, 3)
坐标和当前(x,y) = (2, 3.2)
坐标和angle
之间的差异,我希望下一个坐标距离{{1}与当前d
坐标具有相同的方向。我尝试过使用旋转和平移公式,但未能给出正确的答案。这是我到目前为止的代码。
(x,y)
预期坐标大约为d = 0.5
angle = np.arctan2((y - y_prev), (x - x_prev))
x_ = x * np.cos(angle) - y * np.sin(angle) + (d * np.sinc(angle_/2)* np.cos(angle/2))
y_ = x * np.sin(angle) + y * np.cos(angle) + (d * np.sinc(angle_/2)* np.sin(angle/2))
,方向与当前相同,但会导致坐标错误,所以我有什么遗漏。
提前致谢
答案 0 :(得分:0)
我部分同意@ImportanceOfBeingErnest您的问题是几何问题。但是,我添加了一个答案,因为numpy可以让你避免一开始就尝试做的所有三角函数。
你想要的是找到基于(x_new,y_new)
和(x_prev,y_prev)
的点(x_now,y_now)
,这样三个点位于同一条线上,(x_prev,y_prev)
和{之间的距离{1}}是预设的(x_new,y_new)
。
如果可以使用正确的二维向量,则不需要三角法。您可以对矢量d
进行标准化,以获得您需要从(x_now,y_now) - (x_prev,y_prev)
移动的线的方向矢量,以便最终到达(x_prev,y_prev)
。 Numpy让你优雅地处理这个问题:
(x_new,y_new)
以上结果为import numpy as np
x_prev,y_prev = (1.5, 3)
x_now,y_now = (2, 3.2)
d = 0.5
# use 2d arrays for elegant vector operations
# of course we can directly define these from coordinates if we want to
p_prev = np.array([x_prev,y_prev])
p_now = np.array([x_now,y_now])
# compute the unit direction vector for p_new - p_prev
t = p_now - p_prev
t /= np.linalg.norm(t) # use Euclidean norm by default
# p_new is simple now:
p_new = p_prev + d*t
print(p_prev)
print(p_now)
print(p_new)
。您的积分实际上是(x_new,y_new)=(1.96423835,3.18569534)
距离(x_now,y_now)
几乎0.5
的距离,因此得到的矢量与原始矢量几乎没有差异。但无论如何,上述程序总是会给你一个新的点,它与(x_prev,y_prev)
的{{1}}相同,但是在固定的距离。