Python 有计算李萨如图形面积的算法吗?
假设我有两个信号的测量值Python 有计算李萨如图形面积的算法吗?,python,algorithm,2d,curve,integral,Python,Algorithm,2d,Curve,Integral,假设我有两个信号的测量值 V = V(t) and U = U(t) 在时间上是周期性的,它们之间有相位差。当在一个图形中相对绘制时,它们形成一个李萨如图形,我想计算其中的面积 这种计算有算法吗 我想用Python解决这个问题。但是,任何语言或算法的响应都将非常受欢迎 可以使用以下表达式生成V和U信号的示例: V(t) = V0*sin(2*pi*t) ; U(t) = U0*sin(2*pi*t + delta) 图1显示了V0=10,U0=5,t=np.arange(0.0,2.0,0
V = V(t) and U = U(t)
在时间上是周期性的,它们之间有相位差。当在一个图形中相对绘制时,它们形成一个李萨如图形,我想计算其中的面积
这种计算有算法吗
我想用Python解决这个问题。但是,任何语言或算法的响应都将非常受欢迎
可以使用以下表达式生成V和U信号的示例:
V(t) = V0*sin(2*pi*t) ; U(t) = U0*sin(2*pi*t + delta)
图1显示了V0=10,U0=5,t=np.arange(0.0,2.0,0.01)
和delta=pi/5
的V,U
vst
曲线图
图2显示了相应的李萨如图V
vsU
这是一个更一般问题的具体问题:如何计算通过离散(x\u i,y\u i)
数据集获得的闭合路径积分?要在笛卡尔坐标系中找到(闭合)参数曲线的面积,可以使用格林定理()
但请记住,解释——什么是自相交曲线下的真实面积——是不明确的,正如@algrid在评论中注意到的那样对于通常李萨如形状的最外层曲线区域,我会尝试以下方法:
T
这样的:
U(t) = U(t+T)
V(t) = V(t+T)
t=
我将使用极坐标系,其中心等于间隔t=
上的平均U,V
坐标,并称之为U0,V0
。将数据转换并存储在极坐标中,以便:
a(t)=atan2( V(t)-V0 , U(t)-U0 )
r(t)=sqrt( (U(t)-U0)^2 + (V(t)-V0)^2 )
并且只记住每个角度位置具有最大半径的点。这可以通过阵列(限制角度精度)或几何计算多段线与重叠线段的交点来实现。以及拆卸内部零件这可能不适用于异国情调的形状。以上两种解决方案-由@MBo和@Spektre(以及评论中的@meowgoesthedog)提供-都可以很好地工作。谢谢你们 但是我找到了另一种计算
A
椭圆李萨如曲线面积的方法:使用A=Pi*A*b
公式(A
和b
分别是椭圆的长半轴和短半轴)
步骤:
1-找到V
(或U
)信号的周期T
2-在时间间隔
0中,在t
与极角相关的情况下,可以使用极面积积分。在一般情况下,您需要按极角对点进行排序,并将由每对相邻点和原点形成的三角形的面积相加。如果您要求任何李萨如图形的面积,那么您必须定义像这样的曲线的面积确切指的是什么是Yes@algrid,很难定义这种李萨如曲线的面积(我的猜测是外轮廓定义了面积)。但是对于使用相同频率的V和U信号生成的曲线(我已经问过了),我们没有这个问题。
a(t)=atan2( V(t)-V0 , U(t)-U0 )
r(t)=sqrt( (U(t)-U0)^2 + (V(t)-V0)^2 )
r(t)=sqrt( (U(t)-U0)^2 + (V(t)-V0)^2 )
a = max(r(t)); b = min(r(t))
|D| = max(r(t)) = r(t1); |d| = min(r(t)) = r(t2)
D=(V1,U1)-(V0,U0); d=(V2,U2)-(V0,U0)