"获取笛卡尔坐标正确的几何转换存在困难"

2024-10-01 02:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中工作,我有上一个(x_prev,y_prev) = (1.5, 3)坐标和当前的(x,y) = (2, 3.2)坐标,它们之间有angle差异,我希望下一个坐标与当前的(x,y)坐标在一定距离d处,方向相同。我试过使用旋转和平移公式,但没有给出正确的答案。这是迄今为止我尝试的代码

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))

预期的坐标大约是(x_,y_) = (2.5, 3.6),与当前的方向相同,但它会导致错误的坐标,因此是否有我遗漏的内容

提前谢谢


Tags: 答案代码距离错误npsin差异cos
1条回答
网友
1楼 · 发布于 2024-10-01 02:18:05

我部分同意你的问题是几何问题。但是,我添加了一个答案,因为numpy可以让你避免所有你一开始就想做的三角功

您想要的是基于(x_prev,y_prev)(x_now,y_now)找到点(x_new,y_new),这样三个点位于同一条线上,(x_prev,y_prev)(x_new,y_new)之间的距离是一个预设d

如果你能处理正确的二维向量,你就不需要三角函数。可以对向量(x_now,y_now) - (x_prev,y_prev)进行规格化,以获得需要从(x_prev,y_prev)移动到(x_new,y_new)的直线的方向向量。Numpy让您优雅地处理此问题:

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),所以得到的向量与原始向量几乎没有什么不同。但是不管怎样,上面的过程总是会给你一个新的点,它与(x_prev,y_prev)的角度和(x_now,y_now)的角度相同,但距离是固定的

相关问题 更多 >