|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
15.01.2017, 10:37 | #22 (permalink) |
Новичок
Регистрация: 15.01.2017
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
У меня почему-то не получается подстроить код под мою задачу. Центры эллипса и окружности ввёл (их отдельно посчитал) и изменил данные радиуса окр. и a,b эллипса.
Вот код Код:
Uses CRT; Const R=25.0; Ae=16.0; Be=37.0; Var X0c,Y0c,X0e,Y0e,X1,Y1,X2,Y2,X3,Y3,Step:Real; i,Nt,k:Byte; N:Word; Rect,Trap,Simp:Array[1..100] of Real; Np:Array[1..100] of Word; Function Ysl(Xsl:Real):Real; begin Ysl:=Y1+(Xsl-X1)/(X2-X1)*(Y2-Y1); end; Function Ycr(Xcr:Real):Real; begin Ycr:=Y0c-Sqrt(Sqr(R)-Sqr(Xcr-X0c)); end; Function Yel(Xel:Real):Real; begin Yel:=Y0e-Be*Sqrt(1-Sqr((Xel-X0e)/Ae)); end; Function F1(Xf:Real):Real; begin F1:=-Ycr(Xf); end; Function F2(Xf:Real):Real; begin F2:=-Ysl(Xf); end; Function F3(Xf:Real):Real; begin F3:=Yel(Xf)-Ycr(Xf); end; Function F4(Xf:Real):Real; begin F4:=Ysl(Xf)-Ycr(Xf); end; Function Rectangle1:Real; var i:Integer; Sum,h,a,b:Real; begin a:=X0c-Sqrt(sqr(R)-sqr(Y0c)); b:=X1; h:=(b-a)/N; Sum:=0; for i:=0 to N-1 do Sum:=Sum+h*F1(a+h*i); Rectangle1:=Sum; end; Function Rectangle2:Real; var i:Integer; Sum,h,a,b:Real; begin a:=X1; b:=0; h:=(b-a)/N; Sum:=0; for i:=0 to N-1 do Sum:=Sum+h*F2(a+h*i); Rectangle2:=Sum; end; Function Rectangle3:Real; var i:Integer; Sum,h,a,b:Real; begin a:=0; b:=X3; h:=(b-a)/N; Sum:=0; for i:=0 to N-1 do Sum:=Sum+h*F3(a+h*i); Rectangle3:=Sum; end; Function Rectangle4:Real; var i:Integer; Sum,h,a,b:Real; begin a:=X3; b:=X2; h:=(b-a)/N; Sum:=0; for i:=0 to N-1 do Sum:=Sum+h*F4(a+h*i); Rectangle4:=Sum; end; Function Trapezium1:Real; var i:Integer; Sum,h,a,b:Real; begin a:=X0c-Sqrt(sqr(R)-sqr(Y0c)); b:=X1; h:=(b-a)/N; Sum:=(F1(a)+F1(b))/2*h; for i:=1 to N-1 do Sum:=Sum+h*F1(a+h*i); Trapezium1:=Sum; end; Function Trapezium2:Real; var i:Integer; Sum,h,a,b:Real; begin a:=X1; b:=0; h:=(b-a)/N; Sum:=(F2(a)+F2(b))/2*h; for i:=1 to N-1 do Sum:=Sum+h*F2(a+h*i); Trapezium2:=Sum; end; Function Trapezium3:Real; var i:Integer; Sum,h,a,b:Real; begin a:=0; b:=X3; h:=(b-a)/N; Sum:=(F3(a)+F3(b))/2*h; for i:=1 to N-1 do Sum:=Sum+h*F3(a+h*i); Trapezium3:=Sum; end; Function Trapezium4:Real; var i:Integer; Sum,h,a,b:Real; begin a:=X3; b:=X2; h:=(b-a)/N; Sum:=(F4(a)+F4(b))/2*h; for i:=1 to N-1 do Sum:=Sum+h*F4(a+h*i); Trapezium4:=Sum; end; Function Simpson1:Real; var i,Ns:Integer; Sum,h,a,b:Real; begin a:=X0c-Sqrt(sqr(R)-sqr(Y0c)); b:=X1; Ns:=N div 2; h:=(b-a)/(2*Ns); Sum:=(F1(a)+F1(b))/3*h; for i:=1 to Ns do Sum:=Sum+4.0*h/3.0*F1(a+h*(2*i-1)); for i:=2 to Ns do Sum:=Sum+2.0*h/3.0*F1(a+h*(2*i-2)); Simpson1:=Sum; end; Function Simpson2:Real; var i,Ns:Integer; Sum,h,a,b:Real; begin a:=X1; b:=0; Ns:=N div 2; h:=(b-a)/(2*Ns); Sum:=(F2(a)+F2(b))/3*h; for i:=1 to Ns do Sum:=Sum+4.0*h/3.0*F2(a+h*(2*i-1)); for i:=2 to Ns do Sum:=Sum+2.0*h/3.0*F2(a+h*(2*i-2)); Simpson2:=Sum; end; Function Simpson3:Real; var i,Ns:Integer; Sum,h,a,b:Real; begin a:=0; b:=X3; Ns:=N div 2; h:=(b-a)/(2*Ns); Sum:=(F3(a)+F3(b))/3*h; for i:=1 to Ns do Sum:=Sum+4.0*h/3.0*F3(a+h*(2*i-1)); for i:=2 to Ns do Sum:=Sum+2.0*h/3.0*F3(a+h*(2*i-2)); Simpson3:=Sum; end; Function Simpson4:Real; var i,Ns:Integer; Sum,h,a,b:Real; begin a:=X3; b:=X2; Ns:=N div 2; h:=(b-a)/(2*Ns); Sum:=(F4(a)+F4(b))/3*h; for i:=1 to Ns do Sum:=Sum+4.0*h/3.0*F4(a+h*(2*i-1)); for i:=2 to Ns do Sum:=Sum+2.0*h/3.0*F4(a+h*(2*i-2)); Simpson4:=Sum; end; BEGIN ClrScr; X0c:=-4.0; Y0c:=-15.0; X0e:=-7.0; Y0e:=8.0; Writeln('X0c=',X0c:9:5,' - X координата центра окружности'); Writeln('Y0c=',Y0c:9:5,' - Y координата центра окружности'); Writeln('X0e=',X0e:9:5,' - X координата центра эллипса'); Writeln('Y0e=',Y0e:9:5,' - Y координата центра эллипса'); Writeln; Step:=-1; X1:=0; For i:=1 to 5 do begin Step:=Step/10; Repeat X1:=X1+Step; Y1:=Y0e-Be*Sqrt(1-sqr((X1-X0e)/Ae)); Until Sqr(X1-X0c)+Sqr(Y1-Y0c)>Sqr(R); X1:=X1-Step; end; Y1:=Y0e-Be*Sqrt(1-sqr((X1-X0e)/Ae)); Writeln('X1= ',X1:9:5,' - X координата первой точки пересечения'); Writeln('Y1= ',Y1:9:5,' - Y координата первой точки пересечения'); Y2:=0; X2:=X0c+Sqrt(sqr(R)-sqr(Y0c)); Writeln('X2= ',X2:9:5,' - X координата второй точки пересечения'); Writeln('Y2= ',Y2:9:5,' - Y координата второй точки пересечения'); Step:=1; X3:=0; For i:=1 to 5 do begin Step:=Step/10; Repeat X3:=X3+Step; Y3:=Ysl(X3); Until Sqr((X3-X0e)/Ae)+Sqr((Y3-Y0e)/Be)>1; X3:=X3-Step; end; Y3:=Ysl(X3); Writeln('X3= ',X3:9:5,' - X координата третьей точки пересечения'); Writeln('Y3= ',Y3:9:5,' - Y координата третьей точки пересечения'); Writeln; Writeln('Нажмите "Enter" для продолжения...'); Readln; ClrScr; k:=0; Repeat Write('Введите количество точек (0 для выхода из программы) '); Readln(N); If N>0 then Begin ClrScr; Inc(k); Np[k]:=N; For i:=1 to 58 do Write('-'); Writeln; Writeln('| Число разбиений | Результат |'); Writeln('| |--------------------------------------|'); Writeln('| n | A | B | C |'); For i:=1 to 58 do Write('-'); Writeln; Rect[k]:=Rectangle1+Rectangle2+Rectangle3+Rectangle4; Trap[k]:=Trapezium1+Trapezium2+Trapezium3+Trapezium4; Simp[k]:=Simpson1+Simpson2+Simpson3+Simpson4; For i:=1 to k do Writeln('| ',Np[i]:4,' |',Rect[i]:12:6,'|',Trap[i]:12:6,'|',Simp[i]:12:6,'|'); For i:=1 to 58 do Write('-'); Writeln; End; Until N=0; END. |
15.01.2017, 13:24 | #23 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
На всякий случай, давайте сверим данные по окружности и эллипсу. Если обозначить Xc, Yc координаты центра окружности, то должно получиться так: Xc = -4 Yc = -15, и уравнение окружности, таким образом, запишется, как (x + 4)² + (y +15)² = 25² Обозначая координаты центра эллипса, как Xe, Ye, получаем: Xe = -6.62 Ye = 8, и имеем уравнение эллипса: (x + 6.62)²/16² + (y - 8)²/37² = 1 А вот дальше и начинается основная мутота. Нужно решить (аналитически или численно) систему этих двух нелинейных уравнений и, таким образом, найти координаты точки пересечения окружности и эллипса в правой полуплоскости. Далее нужно найти аналитическое уравнение прямой. Потом сообразить, из каких фрагментов можно составить искомые площади (причем в качестве оси "х" в некоторых случаях удобнее взять вертикальную ось) и сосчитать необходимые интегралы, каковые потом скомбинировать. В общем, тут плотной работы не недельку. Извините, но в это впрягаться я не буду. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|