Существует ли алгоритм вычисления площади фигуры Лиссажу?

Предположим, что у меня есть измерения двух сигналов

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 .

img1

На рисунке 2 показана соответствующая фигура Лиссажу V vs U

img2

Это конкретная проблема более общего вопроса: как вычислить интеграл замкнутого пути, полученный с дискретным набором данных (x_i,y_i) ?

Чтобы найти область (закрытой) параметрической кривой в декартовых координатах, вы можете использовать теорему Грина (здесь 4-я формула )

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

Но помните, что интерпретация – то, что является реальной областью под самопересекающимися кривыми – неоднозначна, как заметил @algrid в комментариях

для внешней области большинства кривых области Lissajous формы я бы попробовал это:

  1. найти период сигнала

    так что найдите T такой:

     U(t) = U(t+T) V(t) = V(t+T) 
  2. данные выборки по t=<0,T>

    Я бы использовал полярную систему координат с центром, равным средней U,V координате 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. Вычислить область из выборочных данных

    Итак, вычислите область, суммируя треугольники пирога для каждой угловой позиции, охватывающей весь круг.

Это может не работать для экзотических фигур.

Оба решения выше – by @MBo и @Spektre (и @meowgoesthedog в комментариях) – отлично работают. Спасибо вам, ребята.

Но я нашел другой способ рассчитать площадь A эллиптической кривой Лиссажу: использовать формулу A = Pi*a*b ( a и b – соответственно основная и младшая полуоси эллипса).

шаги:

1 – найти период T сигнала V (или U );

2 – В интервале времени 0<t<T :

2.а – вычислить средние значения V и U ( V0 и U0 ), чтобы определить центр эллипса;

2.b – вычислить расстояние r(t) от точки ( V0 , U0 ), используя:

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

3 – Найдите значения a и b используя:

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

4 – вычислить A : A = Pi*a*b

Кривые Лиссажу всегда будут эллиптическими, если сигналы U, V являются синусоидальными и имеют одинаковую частоту .

Воспользовавшись этой возможностью, я предложу решение для случая, когда сигналы V, U являются треугольными и имеют одинаковую частоту. В этом случае кривая Лиссажу будет параллелограммом, тогда можно вычислить ее площадь A используя A = 2*|D|*|d|*sin(q) , где |D| и |d| соответственно, длина основной и младшей полудиагоналей параллелограмма, а q – угол между векторами 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 '- рассчитать угол q между D и d ;

6 '- Выполните вычисление A : A = 2*|D|*|d|*sin(q)