无法获得笛卡尔坐标的正确几何变换

时间:2017-04-01 16:07:19

标签: python numpy

我在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)) ,方向与当前相同,但会导致坐标错误,所以我有什么遗漏。

提前致谢

1 个答案:

答案 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}}相同,但是在固定的距离。