有算法来计算Lissajous图的面积吗?

时间:2017-09-01 18:31:21

标签: python algorithm 2d curve integral

假设我测量了两个信号

V = V(t) and U = U(t) 

是时间周期性的,它们之间存在相位差。当在图V vs U中相互绘制时,它们形成了一个Lissajous图,我想计算它内部的区域。

是否有算法进行此类计算?

我想用Python解决这个问题。但是,非常感谢任何语言或算法的响应。

可以使用以下表达式生成V和U信号的示例:

V(t) = V0*sin(2*pi*t) ; U(t) = U0*sin(2*pi*t + delta)

图1显示V,Ut的{​​{1}}与V0=10, U0=5, t=np.arange(0.0,2.0,0.01)的图表。

img1

图2显示了相应的Lissajous数字delta = pi/5 vs V

img2

这是一个更普遍问题的具体问题:如何计算用离散U数据集获得的闭合路径积分?

3 个答案:

答案 0 :(得分:2)

要在笛卡尔坐标系中找到(闭合)参数曲线的区域,可以使用格林定理(4-th formula here

A = 1/2 * Abs(Integral[t=0..t=period] {(V(t) * U'(t) - V'(t) * U(t))dt})

但请记住,解释 - 自相交曲线下的实际区域 - 是不明确的,正如@algrid在评论中注意到的那样

答案 1 :(得分:1)

对于通常的Lissajous形状的最外面的曲线区域,我会尝试这个:

  1. 找到信号期

    所以找T这样:

    U(t) = U(t+T)
    V(t) = V(t+T)
    
  2. t=<0,T>

    上的示例数据

    我会使用极坐标系,其中心等于间隔U,V上的平均t=<0,T>坐标,并将其称为U0,V0。将数据转换并存储在极坐标中,以便:

    a(t)=atan2( V(t)-V0 , U(t)-U0 )
    r(t)=sqrt( (U(t)-U0)^2 + (V(t)-V0)^2 )
    

    并且只记住每个角度位置的最大半径点。这可以通过计算与重叠段的折线交叉来使用阵列(限制角度精度)或几何形状来完成。并删除内部零件。

  3. 从采样数据中计算区域

    因此,通过对覆盖整个圆的每个角度位置的饼图三角形求和来计算面积。

  4. 这可能不适用于异国情调的形状。

答案 2 :(得分:0)

以上两种解决方案 - @ MBo和@Spektre(以及评论中的@meowgoesthedog) - 都运行正常。谢谢你们。

但我找到另一种方法来计算椭圆 Lissajous曲线的区域A:使用A = Pi*a*b公式(ab分别是椭圆的主要和次要半轴

步骤:

1 - 查找T(或V)信号的句点U;

2 - 在时间间隔0<t<T中:

2.a - 计算VUV0U0)的平均值,以确定椭圆的中心;

2.b - 使用以下方式计算距离r(t)V0的距离U0

r(t)=sqrt( (U(t)-U0)^2 + (V(t)-V0)^2 )

3 - 使用以下方式查找ab

a = max(r(t)); b = min(r(t))

4 - 计算AA = Pi*a*b

如果U,V信号是正弦曲线并具有相同的频率,则Lissajous曲线将始终为椭圆曲线。

抓住机会,我将针对V,U信号为三角形并具有相同频率的情况提出解决方案。在这种情况下,Lissajous曲线将是平行四边形,然后可以使用A计算其面积A = 2*|D|*|d|*sin(q),其中|D||d|分别是主要长度平行四边形的小和半对角线q是矢量Dd之间的角度。

对椭圆形情况重复步骤1和2.

在第3步中,我们将:

|D| = max(r(t)) = r(t1); |d| = min(r(t)) = r(t2)

4&#39; - 获取t1t2并使用它们来获取坐标(V(t1)=V1U(t1)=U1)和(V(t2)=V2U(t2)=U2)。然后,向量Dd可以写为:

D=(V1,U1)-(V0,U0); d=(V2,U2)-(V0,U0)

5&#39; - 计算qD之间的角度d;

6&#39; - 执行AA = 2*|D|*|d|*sin(q)

的计算