Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2009, 01:38   #1
TOSAgrk
Пользователь
 
Регистрация: 01.02.2009
Сообщений: 13
По умолчанию Pascal. Площадь пересечения кругов

Два круга заданы координатами центров в прямоугольной декаротовий системе координат и радиусами (все числа действительны). Найти площадь их пересечения


в етом задании совсем не ориентируюсь....
TOSAgrk вне форума Ответить с цитированием
Старый 05.02.2009, 04:23   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Здесь одна математика..
Вот..Вроде работает.
Переменных много, но это для наглядности..
Код:
uses crt;
var
R1,R2,x1,x2,y1,y2 : real;
a,seg1,seg2,S : real;
alpha1,alpha2 : real;
S1,S2,Sec1,Sec2 : real;
x : real;
h1,h2,b1,b2 : real;

begin
clrscr;
writeln('Krug 1:');
write('x0= '); readln(x1);
write('y0= '); readln(y1);
write('R= '); readln(R1);
writeln('Krug 2:');
write('x0= '); readln(x2);
write('y0= '); readln(y2);
write('R= '); readln(R2);
{------}
a := sqrt(sqr(x2-x1)+sqr(y2-y1)); { расстояние между центрами }

if R1+R2<=a then S:=0       { если круги не пересекаются...}
else if a<=abs(R1-R2) then       { если один круг полностью в другом }
   if R1>R2 then S:= pi*sqr(R2)
    else S:= pi*sqr(R1)
else
  begin
  x := R1+R2 - a;
  if R1<R2 then
    begin
    R1 := R1+R2;
    R2 := R1-R2;
    R1 := R1-R2;
    end;
  {----}
  h1 := R1 - (x/2)*(R2/R1);
  h2 := R2 - (x/2)*(R1/R2);
  b1 := 2*sqrt(sqr(R1)-sqr(h1));
  b2 := 2*sqrt(sqr(R2)-sqr(h2));
  S1 := b1*h1/2;
  S2 := b2*h2/2;
  alpha1 := 2*arctan(b1/(2*h1));
  alpha1 := alpha1*180/pi;
  alpha2 := 2*arctan(b2/(2*h2));
  alpha2 := alpha2*180/pi;
  Sec1 := pi*sqr(R1)*alpha1/360;
  Sec2 := pi*sqr(R2)*alpha2/360;
  if alpha1>180 then S1 := -S1;
  if alpha2>180 then S2 := -S2;
  Seg1 := Sec1 - S1;
  Seg2 := Sec2 - S2;
  S := Seg1 + Seg2;
  end;
writeln('S= ',S:10:7);
readln;
end.
Пример ввода:
Код:
Krug 1:
x0= 0
y0= 0
R= 5
Krug 2:
x0= 7
y0= 0
R= 4
S=  7.9595741
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37
Найти площадь треугольник (задача в делфи) YO$YA Помощь студентам 5 19.11.2008 21:29
Найти объём куба и площадь его боковой поверхности BASIC Ветренная Помощь студентам 23 02.06.2008 13:15
ассемблер. Написать функцию, вычисляющую по заданным точкам а,b,c площадь треугольника abс. qimbo Помощь студентам 5 05.01.2008 13:54
ActionToolBar. Проблема пересечения компонентов nimf Компоненты Delphi 0 18.10.2007 10:42