如何检查向量在python中是否转了一圈

问题描述 投票:2回答:1

我实际上正在处理代表2d空间中(大致)嘈杂的圆圈的数据。我一次获取一个点的数据,目标是知道这些点是否绕圈了。

为此,我将每个连续点视为仅一个转过一点的向量。并且要知道何时转了一圈(意味着何时形成圆),我检查了x和y坐标何时都在那里改变了两次(这意味着向量已经转2 * 0.5圈= 1圈)。然后我再等半圈来补偿启动误差。确实,取决于它最初是在空间的四分之一处开始的,它可能并没有完全转弯。

我不需要非常精确。所以这对我来说很好,但是我想知道是否还有另一种方法更有效,并且可以显示真实的匝数。当积分到达缓慢时,这可以加快处理速度(避免让我再等半个小时)–>

重要的一点是我只能使用Numpy。

EDIT

:更精确,每个点之间的距离不是规则的。首先,圆开始缓慢形成,然后加速。因此,开始时这些点比结束时更密集。另一件事是(0,0)点甚至可能不包含在圆中。最后,我说大概是圆形的,因为它往往是椭圆形的,但形状不是很差,只是有点吵。

[对不起,但至少到目前为止,我无法提供数据。我会告诉您一周内是否有可能。

我实际上正在处理代表2d空间中(大致)嘈杂的圆圈的数据。我一次获取一个点的数据,目标是知道这些点是否绕圈了。为此,我...

python-3.x computational-geometry
1个回答
0
投票

如果确保每个新数据点的极角均大于上一个极角,即在过程中圆是逐步形成而没有任何点“后退”的,那么对于每对连续的点,您都可以计算角度在它们之间,然后当总和达到两个pi时就可以停止。例如:

angle = 0
points = [next(generator)]  # 'generator' produces the data points
while angle < 2*pi:
    points.append(next(generator))
    angle += np.arccos(
        np.dot(points[-2], points[-1]) / 
        (np.linalg.norm(points[-2]) * np.linalg.norm(points[-1]))
    )
del points[-1]  # optionally delete the last point in order to stay below 2 pi
© www.soinside.com 2019 - 2024. All rights reserved.