Top.Mail.Ru
Ответы

Как найти площадь пересечения колец?

Можно, пожалуйста, формулу? Пишу программу на языке Pascal для решения задачи, с файлами вывода input.txt output.txt
Никак не могу найти формулу, помогите пожалуйста

Дополнен

Кольцо представляет собой область плоскости, ограниченную двумя окружностями.
Пусть имеются два кольца, каждое из которых задается координатами своего центра (xi,yi)(xi,yi), а также внутренним qiqi и внешним riri радиусами (i=1,2i=1,2).
Требуется определить площадь их пересечения.

Ввод-вывод я нашел как писать, меня интересует формула площади пересечения колец

По дате
По рейтингу
Аватар пользователя
Новичок
9лет

Ну пишешь

begin
assign (тут водишь переменную типа текст которую создашь выше, и путь к файлу не забудь про запятую между типом и путем )
reser(t- это переменная типа текст); - глянь в интернете я уже не помню, но вроде она читает файл или открывает
read(t, a ); вот тут она записывает, значит вверху открывает файл
close(t); - закрывает файл

тут все почти тоже самое только тут идет в другой файл
assign (t, output.txt);
rewrite(t);
write(t,a);
close(t);

end.

p.s глянь в интернете, переменные то я правильно написал, а вот что они делают уже не помню

Аватар пользователя
Мастер
9лет

Написал бы полностью условие задачи. А так мы тебе насоветуем ...

Аватар пользователя
Мастер
9лет

решение на Turbo Pascal 7.0 (ссылка на скачивание, если здесь неправильно что-либо отобразится)
"my-files.ru/xmgvee" (курить надо бросать... даже на сигареты не спонсируют)
решение программы проверено через "Компас 3D V16"

uses crt;
var L,summa, S, S_tr, h, L1, angle: real;
{var r1, r2, r3, r4 : real;
x1,y1, x3,y3: integer;}
const r1=40; r2=70; r3=50; r4=60;
x1=0; y1=0; x2=110; y2=-20;

{можно функцию или процедуру написать, нет желания выделять общее}
{для первого кольца r1 - малая окружность, r2 - большая окружность}
{для второго кольца r3 - малая окружность, r4 - большая окружность}
{x1,y1 - координаты центра первого кольца, x2,y2 - второго кольца}
begin
clrscr;
summa:=0;
L:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if (r2+r4)>L then
begin
write;
S_tr:=sqrt( (r2+r4+L)/2* ((r2+r4+L)/2-r2) *((r2+r4+L)/2-r4)*((r2+r4+L)/2-L));
h:=2*s_tr/L;
L1:= sqrt( sqr(r2)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r2)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa+S;
L1:= sqrt( sqr(r4)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r4)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa+S;
end
else writeln (' окружности не пересекаются ');
if (r2+r3)>L then
begin
write;
S_tr:=sqrt( (r2+r3+L)/2* ((r2+r3+L)/2-r2) *((r2+r3+L)/2-r3)*((r2+r3+L)/2-L));
h:=2*s_tr/L;
L1:= sqrt( sqr(r2)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r2)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa-S;
L1:= sqrt( sqr(r3)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r3)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa-S;
end;
if (r1+r4)>L then
begin
write;
S_tr:=sqrt( (r1+r4+L)/2* ((r1+r4+L)/2-r1) *((r1+r4+L)/2-r4)*((r1+r4+L)/2-L));
h:=2*s_tr/L;
L1:= sqrt( sqr(r1)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r1)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa-S;
L1:= sqrt( sqr(r4)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r4)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa-S;
end;
if (r1+r3)>L then
begin
write;
S_tr:=sqrt( (r1+r3+L)/2* ((r1+r3+L)/2-r1) *((r1+r3+L)/2-r3)*((r1+r3+L)/2-L));
h:=2*s_tr/L;
L1:= sqrt( sqr(r1)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r1)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa+S;
L1:= sqrt( sqr(r3)-sqr(h));
angle:=arctan (h/L1) / Pi *180;
angle:=angle*2;
S:= sqr (r3)/2*(Pi/180*angle-sin(angle*Pi/180));
summa:=summa+S;
end;
writeln ( ' Площадь пересечения двух колец = ', summa:4:3);
readln;
end.

Аватар пользователя
Искусственный интеллект
9лет

>Ввод-вывод я нашел как писать, меня интересует формула площади пересечения колец
Нет никакой формулы.
Делаем так:

1. Помещаем одно кольцо в начало системы координат.
2. Поворачиваем всю систему так, чтобы оба кольца лежали на оси ординат.
3. Проверяем, пересекаются ли наши кольца вообще (теперь это легко).
4. Проверяем, как именно они пересекаются - крест-накрест или частичным касанием или одно внутри другого или...
5. В зависимости от 4 находим узловые точки и делаем заливку пересечений (фактически - численное интегрирование). Получим некую приблизительную площадь. Ну или можно формулы тут изобретать, но это будет интегрирование в полярных координатах с якобианами и прочими прелестями.

Аватар пользователя
Профи
9лет

надо погуглить Площадь пересечения окружностей на плоскости

Аватар пользователя
Мастер
9лет

решаем через хорды и площадь сегмента, отсеченного хордой
формулы перехода буду слегка трехэтажными, но решение есть



Видео по теме