有没有算法来计算利萨如图的面积?
假设我有两个信号有没有算法来计算利萨如图的面积?
V = V(t) and U = U(t)
是周期性的时间与他们之间的相位差的测量。当在图V vs U
中彼此相互作图时,它们形成利萨如图,我想计算其中的面积。
是否有这样的计算算法?
我想用Python解决这个问题。但是,以任何语言或算法做出响应将非常感激。可以使用类似的表达式来产生V和U信号的
实例:
V(t) = V0*sin(2*pi*t) ; U(t) = U0*sin(2*pi*t + delta)
图1示出的V,U
VS t
为V0=10, U0=5, t=np.arange(0.0,2.0,0.01)
和delta = pi/5
的曲线图。
以及图2显示了相应的Lissajous图V
VS U
。
这是一个更普遍的问题的一个具体的问题:如何计算与离散(x_i,y_i)
数据集获得积分的闭合路径?
查找(关闭)参数曲线的面积在直角坐标系中,可以使用格林公式(4-th formula here)
A = 1/2 * Abs(Integral[t=0..t=period] {(V(t) * U'(t) - V'(t) * U(t))dt})
但请记住,解释 - 什么是下自相交曲线实际面积 - 是模糊的,如@algrid在评论中发现
通常为李萨形状的最外面的曲线区域我想试试这个:
-
信号的查找周期
所以找到
T
例如:上t=<0,T>
U(t) = U(t+T) V(t) = V(t+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)
并记住只有每个角度位置最大半径点。这可以通过数组(通过角度限制精度)或通过计算与重叠线段的折线交点来完成。并去除内部零件。
-
计算从采样数据
面积因此,通过饼图三角形求和用于覆盖整个圆每个角位置计算的区域。
这可能不适用于异国情调的形状。
以上两种解决方案 - by @MBo和@Spektre(以及评论中的@meowgoesthedog) - 都可以正常工作。感谢你们。
但我发现另一种方式来计算面积的椭圆利萨如曲线的A
:使用A = Pi*a*b
式(a
和b
分别是主要和次要半轴的椭圆的)。
步骤:
1 - 查找V
(或U
)信号的周期T
;
2 - 在所述时间间隔0<t<T
:
2.A - 计算的V
和U
(V0
和U0
)的平均值,以便确定椭圆的中心;
2.B - 从使用点(V0
,U0
)计算距离r(t)
: - :
a = max(r(t)); b = min(r(t))
4 - 计算A
r(t)=sqrt((U(t)-U0)^2 + (V(t)-V0)^2)
3使用查找a
和b
值: A = Pi*a*b
利萨如曲线总是elli如果U,V信号类似于正弦曲线并且具有相同的频率。
抓住机遇,我将针对V,U信号为三角形且频率相同的情况提出解决方案。在这种情况下,利萨如曲线将是一个平行四边形,那么就可以使用A = 2*|D|*|d|*sin(q)
,其中|D|
和|d|
分别是,主要和次要半对角线平行四边形的和q
的长度计算出其面积A
是之间的角度载体D
和d
。
对于椭圆的情况重复步骤1和2。
在步骤3中,我们将有:
|D| = max(r(t)) = r(t1); |d| = min(r(t)) = r(t2)
4' - 获取t1
和t2
并利用它们来获取坐标(V(t1)=V1
,U(t1)=U1
)和(V(t2)=V2
,U(t2)=U2
)。然后,矢量D
和d
可以写为:
D=(V1,U1)-(V0,U0); d=(V2,U2)-(V0,U0)
5' - 计算D
和d
之间的角度q
;
6' - 执行的A
计算:A = 2*|D|*|d|*sin(q)
可以使用极性区域在't'是关系到极角的情况积分。在一般情况下,您需要按极角对点进行排序,并将由每对相邻点和原点形成的三角形的面积相加 – meowgoesthedog
如果您要求提供任何李沙育图的面积,则必须定义你的意思是按照这个曲线的面积https://en.m.wikipedia.org/wiki/Lissajous_curve#/media/File%3ALissajous_curve_5by4.svg – algrid
是@algrid,很难定义这个区域是什么一种利萨如曲线(我的猜测是外轮廓定义了该区域)。但对于使用V和U信号以相同频率生成的曲线(我所问),我们没有这个问题。 –