Технический форум

Технический форум (http://www.tehnari.ru/)
-   Basic (http://www.tehnari.ru/f127/)
-   -   Приближенная формула длины эллипса (http://www.tehnari.ru/f127/t249513/)

iks2 23.10.2016 15:36

Приближенная формула длины эллипса
 
Пусть L – длина эллипса, a - большая п-ось, b - малая п-ось. Тогда
L = a*(2.28 * (b/a) ^ 1.44 + 4).
Относительная погрешность составляет величину порядка 0,5%
Мне нужно, чтобы кто-то подтвердил или опроверг эту формулу.
прилагаю программу на QBasic, которая и просчитала погрешность, вычисляя длину эллипса методом трапеций и по формуле.

Код:

REM  QBASIC

DECLARE FUNCTION p! (b!)
DECLARE FUNCTION f! (b!)
CLS

SCREEN 11
WINDOW (-.5, 6.5)-(1.5, 3.5)
LINE (0, 4)-(0, 6.2832)
LINE (1, 4)-(1, 6.2832)
LINE (0, 4)-(1, 4)
LINE (0, 6.2832)-(1, 6.2832)

FOR b = 0 TO 1 STEP .005
  PSET (b, f(b))
  PSET (b, p(b))
NEXT b

FOR b = 0 TO 1.01 STEP .05
  PRINT USING "##.## %"; (f(b) - p(b)) / f(b) * 100
NEXT b

SLEEP 0
SCREEN 0
END

FUNCTION f (b)
  h = .002
  s = (b + 1) / 2
  FOR x = h TO 1.57 STEP h
      s = s + SQR(SIN(x) ^ 2 + (b * COS(x)) ^ 2)
  NEXT x
  f = 4 * h * s
END FUNCTION

FUNCTION p (b)
  p = 2.28 * b ^ 1.44 + 4
END FUNCTION


Vladimir_S 23.10.2016 18:10

Цитата:

Сообщение от iks2 (Сообщение 2426405)
Пусть L – длина эллипса, a - большая п-ось, b - малая п-ось. Тогда L = a*(2.28 * (b/a) ^ 1.44 + 4).

Формула непонятна. Наберите, пожалуйста, например, в Word'е или просто напишите от руки и сфотографируйте.
Цитата:

Сообщение от iks2 (Сообщение 2426405)
вычисляя длину эллипса методом трапеций

Здесь я могу предложить более простой и точный метод.
Длина (периметр) эллипса вычисляется, как
L = 4*a*E(m), где m² = (a² - b²)/a², а Е(m) - полный эллиптический интеграл второго рода. Он может быть с точностью до пятого знака аппроксимирован функцией

E(m) = [1 + a1*n + a2*n²] + [b1*n + b2*n²]*ln(1/n),
где n = 1 - m, а коэффициенты имеют следующие значения:

a1 = 0.4630151
a2 = 0.1077812
b1 = 0.2452727
b2 = 0.0412496

iks2 23.10.2016 18:31

Вложений: 1
Вот, нарисовал в графическом редакторе.

Vladimir_S 23.10.2016 18:44

Цитата:

Сообщение от iks2 (Сообщение 2426467)
Вот, нарисовал в графическом редакторе.

Спасибо. Ну, во всяком случае, крайние значения a=b и b=0 дают правильный результат! :)

iks2 23.10.2016 19:30

Vladimir_S,
Вы понимаете, крайние значения были заданы по умолчанию точно. То есть большая п-ось а была положена равной 1 и потому крайние значения должны были равны 4 и 6,2832... Поскольку получилась функция от одной переменной b (малая п-ось), то несложно было вычислить и длину эллипса. График длины эллипса показал, что это степенная функция. И осталось вычислить только степень....
Спасибо вам за формулу!

Vladimir_S 24.10.2016 14:50

Вложений: 1
Что-то как-то у меня не очень хороший результат получился с Вашей аппроксимацией... Если не наврал, то так:
Вложение 310903
В области наибольшего расхождения погрешность достигает 8.5%. Многовато.
На всякий случай - вот программа (увы, Паскаль, а не Бэйсик):
Код:

Var
 f:Text;
 i:Byte;
 r:Real;

Const
 a1 = 0.4630151;
 a2 = 0.1077812;
 b1 = 0.2452727;
 b2 = 0.0412496;

Function Ell_Int(ba:real):real;
var
 n,m:real;
begin
 m:=SQRT(1-Sqr(ba));
 n:=1-m;
 Ell_Int:=((1+a1*n+a2*n*n)+(b1*n + b2*n*n)*ln(1/n))*4;
end;

Function Ell_App(ba:real):real;
begin
 Ell_App:=((Pi*2-4)*Exp(1.44*ln(ba))+4);
end;

Begin
 Assign(f,'D:\Ell.dat');
 Rewrite(f);
 for i:=1 to 100 do
  begin
  r:=0.01*i;
  writeln(f,r:4:2,Ell_Int(r):15:5,Ell_App(r):15:5,Abs((Ell_App(r)-Ell_Int(r))/(Ell_App(r)+Ell_Int(r)))*200:15:5);
  end;
 Close(f);
End.


iks2 24.10.2016 16:04

Вложений: 1
Vladimir_S
довольно сложно понять эллиптический интеграл, когда с ним не имеешь дела. У меня все было проще. Вот формула эллипса в параметрическом виде
x = a*cos(t) , (a = 1)
y = b*sin(t)
отсюда легко определяется дифференциал дуги и вычисляется длина эллипса...
Вот два графика - они практически сливаются в одну линию. Слева столбец - расчет относительной погрешности в процентах.

Vladimir_S 24.10.2016 16:51

Вложений: 1
Да, виноват: где-то лажа. Или у меня (что скорее), или в справочнике по спецфункциям. Сейчас посчитал Вашим методом (правда, по Симпсону, причем до схождения в третьем знаке) - всё сошлось с Вашей аппроксимацией. Разберусь на досуге, где ошибка - аж самому интересно:
Вложение 310915

Vladimir_S 24.10.2016 19:06

М-да, пока - непонятно. Склоняюсь к тому, что в справочнике лажа. А ведь уж ЭТОМУ труду привык верить, как себе...


Часовой пояс GMT +4, время: 00:40.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.