Можно, пожалуйста, формулу? Пишу программу на языке Pascal для решения задачи, с файлами вывода input.txt output.txt
Никак не могу найти формулу, помогите пожалуйста
Другие языки программирования и технологии
Как найти площадь пересечения колец?
Ну пишешь
begin
assign (тут водишь переменную типа текст которую создашь выше, и путь к файлу не забудь про запятую между типом и путем )
reser(t- это переменная типа текст); - глянь в интернете я уже не помню, но вроде она читает файл или открывает
read(t, a ); вот тут она записывает, значит вверху открывает файл
close(t); - закрывает файл
тут все почти тоже самое только тут идет в другой файл
assign (t, output.txt);
rewrite(t);
write(t,a);
close(t);
end.
p.s глянь в интернете, переменные то я правильно написал, а вот что они делают уже не помню
begin
assign (тут водишь переменную типа текст которую создашь выше, и путь к файлу не забудь про запятую между типом и путем )
reser(t- это переменная типа текст); - глянь в интернете я уже не помню, но вроде она читает файл или открывает
read(t, a ); вот тут она записывает, значит вверху открывает файл
close(t); - закрывает файл
тут все почти тоже самое только тут идет в другой файл
assign (t, output.txt);
rewrite(t);
write(t,a);
close(t);
end.
p.s глянь в интернете, переменные то я правильно написал, а вот что они делают уже не помню
Михаил Слесаренко
Написал бы полностью условие задачи. А так мы тебе насоветуем ...
>Ввод-вывод я нашел как писать, меня интересует формула площади пересечения колец
Нет никакой формулы.
Делаем так:
1. Помещаем одно кольцо в начало системы координат.
2. Поворачиваем всю систему так, чтобы оба кольца лежали на оси ординат.
3. Проверяем, пересекаются ли наши кольца вообще (теперь это легко).
4. Проверяем, как именно они пересекаются - крест-накрест или частичным касанием или одно внутри другого или...
5. В зависимости от 4 находим узловые точки и делаем заливку пересечений (фактически - численное интегрирование). Получим некую приблизительную площадь. Ну или можно формулы тут изобретать, но это будет интегрирование в полярных координатах с якобианами и прочими прелестями.
Нет никакой формулы.
Делаем так:
1. Помещаем одно кольцо в начало системы координат.
2. Поворачиваем всю систему так, чтобы оба кольца лежали на оси ординат.
3. Проверяем, пересекаются ли наши кольца вообще (теперь это легко).
4. Проверяем, как именно они пересекаются - крест-накрест или частичным касанием или одно внутри другого или...
5. В зависимости от 4 находим узловые точки и делаем заливку пересечений (фактически - численное интегрирование). Получим некую приблизительную площадь. Ну или можно формулы тут изобретать, но это будет интегрирование в полярных координатах с якобианами и прочими прелестями.
решение на 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.
"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.
надо погуглить Площадь пересечения окружностей на плоскости
Михаил Слесаренко
решаем через хорды и площадь сегмента, отсеченного хордой
формулы перехода буду слегка трехэтажными, но решение есть
формулы перехода буду слегка трехэтажными, но решение есть
Похожие вопросы
- В трехмерном пространстве есть отрезок и плоскость. Не могу найти их пересечение C#
- Pasal! Как найти точку пересечения двух прямых? ax+by+c=0
- Площадь шестиугольника
- C++ расчет площади методом монте-карло
- Имеется треугольник с известной гипотенузой(c=5).Найти размеры катетов при которых треугольник имеет наибольшую площадь.
- как в visual basic определить методом Монте-Карло площадь треугольника?
- Треугольник задан координатами своих вершин. вычислить его площадь. На языке СИ!
- программисты носят кольца?
- Артефакты в виде колец в фотошопе
- Как просчитать пересечение луча с трёхмерным объектом из треугольников?