Рассмотрим решение базовой задачи.
Задача : Найти площадь треугольника, заданного координатами своих вершин (рис.10.1).
(рис 10.1)
Справочная информация: Для нахождения площади треугольника воспользуемся формулой Герона:
S=SQR (p(p-a)(p-b)(p-c))
где a, b, c - длины сторон, а р - полупериметр.
Программа на Бейсике:
print "введите пары координат трех точек" input x1, y1 input x2, y2 input x3, y3 a= sqr ((x1-x2)^2+(y1-y2)^2) b= sqr ((x2-x3)^2+(y2-y3)^2) c= sqr ((x3-x1)^2+(y3-y1)^2) per= a+b+c print "периметр треугольника="; per p=per/2 s= sqr (p*(p-a)*(p-b)*(p-c)) print "площадь="; s
Программа на Паскале:
var x1,x2,x3,y1,y2,y3: integer;
a,b,c,p: real;
begin
writeln ('введите пары координат трех точек');
readln (x1, y1);
readln (x2, y2);
readln (x3, y3);
a:= sqrt (sqr(x1-x2)+sqr(y1-y2));
b:= sqrt (sqr(x2-x3)+sqr(y2-y3));
c:= sqrt (sqr(x3-x1)+sqr(y3-y1));
p:=(a+b+c) / 2;
writeln ('площадь треугольника:=', sqrt (p*(p-a)*(p-b)*(p-c)));
end.
Тест:
| Дано: | 1,2 1,5 5,2 |
| Результат: | 6 |
Задача: Определить площадь выпуклой фигуры, заданной координатами своих вершин (координаты вводятся в соответствии с последовательным обходом вершин - см. рис.10.2).
Идея решения: задачу можно решить двумя способами.
1 способ: площадь выпуклой фигуры равна сумме площадей треугольников, имеющих общую вершину:
(рис 10.2)
Программа на Бейсике:
input "введите количество вершин многоугольника"; n dim x(n), y(n) for i=1 to n input "введите пару координат"; x(i), y(i) next for i=2 to n-1 a= sqr ((x(1)-x(i))^2+(y(1)-y(i))^2) b= sqr ((x(i)-x(i+1))^2+(y(i)-y(i+1))^2) c= sqr ((x(i+1)-x(1))^2+(y(i+1)-y(1))^2) p= (a+b+c)/2 s=s+sqr (p*(p-a)*(p-b)*(p-c)) next print "площадь фигуры="; s
Программа на Паскале:
const nn=10 ;
var x,y: array [1..nn] of integer;
i, n: integer;
a, b, c, s, p: real;
begin
writeln ('введите количество вершин многоугольника');
readln (n);
for i:=1 to n do
begin
writeln (''введите пару координат');
readln (x[i], y[i]);
end;
for i:=2 to n-1 do
begin
a:= sqrt (sqr(x[1]-x[i])+sqr(y[1]-y[i]));
b:= sqrt (sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]));
c:= sqrt (sqr(x[i+1]-x[1])+sqr(y[i+1]-y[1]));
p:= (a+b+c)/2
s:=s+sqrt (p*(p-a)*(p-b)*(p-c))
end;
writeln ('площадь фигуры=', s);
end.
Тест:
| Дано: | N=5 3,2 2,5 4,7 8,5 7,1 |
| Результат: | 23.5 |
2 способ: Второй способ вычисления площади выпуклой фигуры иллюстрирует схема (рис. 10.3):
(рис 10.3)
Решите задачу этим методом самостоятельно.
Задача 3: Определить - находится точка внутри или вне выпуклого многоугольника, заданного координатами своих вершин.
Идею решения задачи иллюстрирует схема (рис.10.4):
(рис 10.4)
Программа на Бейсике:
input "введите координаты точки"; x, y input "введите количество вершин многоугольника"; n dim x(n+1), y(n+1) for i=1 to n input "введите координаты вершин"; x(i), y(i) next x(n+1)=x(1) y(n+1)=y(1) rem====================================== for i=2 to n-1 a= sqr ((x(1)-x(i))^2+(y(1)-y(i))^2) b= sqr ((x(i)-x(i+1))^2+(y(i)-y(i+1))^2) c= sqr ((x(i+1)-x(1))^2+(y(i+1)-y(1))^2) p= (a+b+c)/2 s1=s1+sqr (p*(p-a)*(p-b)*(p-c)) next rem====================================== for i=1 to n a= sqr ((x-x(i))^2+(y-y(i))^2) b= sqr ((x(i)-x(i+1))^2+(y(i)-y(i+1))^2) c= sqr ((x(i+1)-x)^2+(y(i+1)-y)^2) p= (a+b+c)/2 s2=s2+sqr (p*(p-a)*(p-b)*(p-c)) next if s1=s2 then print "точка внутри" else print "точка вне фигуры"
Программа на Паскале:
const nn=100 ;
var x,y: array [1..nn] of integer;
i,xx,yy,n: integer;
a,b,c, p, s1,s2: real;
begin
writeln ('введите координаты точки');
readln (xx,yy);
writeln ('введите количество вершин многоугольника');
readln (n);
for i:=1 to n do
begin
writeln ('введите координаты вершин');
readln (x[i], y[i]);
end;
x[n+1]:=x[1];
y[n+1]:=y[1];
for i:=2 to n-1 do
begin
a:= sqrt (sqr(x[1]-x[i])+sqr(y[1]-y[i]));
b:= sqrt (sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]));
c:= sqrt (sqr(x[i+1]-x[1])+sqr(y[i+1]-y[1]));
p:= (a+b+c) / 2;
s1:=s1+sqrt (p*(p-a)*(p-b)*(p-c));
end;
for i:=1 to n do
begin
a:= sqrt (sqr(xx-x[i])+sqr(yy-y[i]));
b:= sqrt (sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]));
c:= sqrt (sqr(x[i+1]-xx)+sqr(y[i+1]-yy));
p:= (a+b+c) / 2;
s2:=s2+sqrt (p*(p-a)*(p-b)*(p-c));
end;
if round(s1)=round(s2) then writeln ('точка внутри')
else writeln ('точка вне фигуры');
end.
Тест:
| Дано: | 5,4 5 3,2 2,5 4,7 8,5 7,1 |
10,10 5 3,2 2,5 4,7 8,5 7,1 |
| Результат: | внутри | вне |
Задача 4: Определить, пересекаются ли два отрезка, заданные на плоскости координатами своих концов (примеры взаимного расположения отрезков на рис.10.5).
(рис 10.5)
Идею решения задачи иллюстрирует схема (рис.10.6):
Отрезки пересекаются если:
(рис 10.6) Отрезки не пересекаются (рис.10.7) если …
(рис 10.7) Следует отметить, что данный метод определения пересечения двух отрезков имеет исключение, в случаях:
Программа на Бейсике:
input "введите две координаты концов 1 отрезка"; x1,y1 input "введите две координаты концов 1 отрезка"; x2,y2 input "введите две координаты концов 2 отрезка"; xx1,yy1 input "введите две координаты концов 2 отрезка"; xx2,yy2 rem=площадь первой фигуры======================= a=sqr ((xx1-xx2)^2+(yy1-yy2)^2) b=sqr ((x1-xx1)^2+(y1-yy1)^2) c=sqr ((x1-xx2)^2+(y1-yy2)^2) p= (a+b+c)/2 s1=s1+sqr (p*(p-a)*(p-b)*(p-c)) rem b=sqr ((x2-xx1)^2+(y2-yy1)^2) c=sqr ((x2-xx2)^2+(y2-yy2)^2) p= (a+b+c)/2 s1=s1+sqr (p*(p-a)*(p-b)*(p-c)) rem=площадь второй фигуры=========================== a=sqr ((x1-x2)^2+(y1-y2)^2) b=sqr ((x2-xx1)^2+(y2-yy1)^2) c=sqr ((x1-xx1)^2+(y1-yy1)^2) p= (a+b+c)/2 s2=s2+sqr (p*(p-a)*(p-b)*(p-c)) rem b=sqr ((x1-xx2)^2+(y1-yy2)^2) c=sqr ((x2-xx2)^2+(y2-yy2)^2) p= (a+b+c)/2 s2=s2+sqr (p*(p-a)*(p-b)*(p-c)) rem============================================ print s1,s2 if int(s1)=int(s2) then print "пересекаются" else print "не пересекаются"
Программа на Паскале:
var x1,x2,y1,y2,xx1,xx2,yy1,yy2: integer;
p,a,b,c,s1,s2:real;
begin
writeln ('введите две координаты концов 1 отрезка');
readln (x1,y1);
writeln ('введите две координаты концов 1 отрезка');
readln (x2,y2);
writeln ('введите две координаты концов 2 отрезка');
readln (xx1,yy1);
writeln ('введите две координаты концов 2 отрезка');
readln (xx2,yy2);
{=====площадь первой фигуры=============}
a:=sqrt (sqr(xx1-xx2)+sqr(yy1-yy2));
b:=sqrt (sqr(x1-xx1)+sqr(y1-yy1));
c:=sqrt (sqr(x1-xx2)+sqr(y1-yy2));
p:= (a+b+c)/2;
s1:=s1+sqrt (p*(p-a)*(p-b)*(p-c));
{==================================}
b:=sqrt (sqr(x2-xx1)+sqr(y2-yy1));
c:=sqrt (sqr(x2-xx2)+sqr(y2-yy2));
p:= (a+b+c)/2;
s1:=s1+sqrt (p*(p-a)*(p-b)*(p-c));
{=====площадь второй фигуры=============}
a:=sqrt (sqr (x1-x2)+ sqr (y1-y2));
b:=sqrt (sqr (x2-xx1)+ sqr (y2-yy1));
c:=sqrt (sqr (x1-xx1)+ sqr (y1-yy1));
p:= (a+b+c)/2;
s2:=s2+sqrt (p*(p-a)*(p-b)*(p-c));
{=================================}
b:=sqrt (sqr (x1-xx2)+ sqr (y1-yy2));
c:=sqrt (sqr (x2-xx2)+ sqr (y2-yy2));
p:= (a+b+c)/2;
s2:=s2+sqrt (p*(p-a)*(p-b)*(p-c));
{==================================}
writeln (s1,s2);
if round(s1)=round(s2) then writeln ('пересекаются')
else writeln ('не пересекаются');
end.
Тест:
| Дано: | 2,4 8,7 3,8 8,1 |
3,6 8,1 6,5 11,7 |
| Результат: | Пересекаются | Не пересекаются |
Для определения площади треугольника необходимо воспользоваться формулой Герона.
Для нахождения площади многоугольника потребуется найти сумму площадей треугольников, составляющих этот многоугольник.
Решение задач на определение вхождения точки в область многоугольника, пересечения двух отрезков необходимо также найти площади треугольников, составляющих фигуры.
Вопросы.
Упражнения.
Найти площадь 4-хугольника (не обязательно прямоугольника), заданного координатами своих вершин (на рис.10.8 изображен частный случай). Найти другой метод (кроме метода разбиения многоугольника на треугольники) нахождения площади этого прямоугольника.
(рис 10.8) Рассмотрим решение базовой задачи.
Задача : Найти площадь треугольника, заданного координатами своих вершин (рис.10.1).
(рис 10.1)
Справочная информация: Для нахождения площади треугольника воспользуемся формулой Герона:
S=SQR (p(p-a)(p-b)(p-c))
где a, b, c - длины сторон, а р - полупериметр.
Программа на Бейсике:
print "введите пары координат трех точек" input x1, y1 input x2, y2 input x3, y3 a= sqr ((x1-x2)^2+(y1-y2)^2) b= sqr ((x2-x3)^2+(y2-y3)^2) c= sqr ((x3-x1)^2+(y3-y1)^2) per= a+b+c print "периметр треугольника="; per p=per/2 s= sqr (p*(p-a)*(p-b)*(p-c)) print "площадь="; s
Программа на Паскале:
var x1,x2,x3,y1,y2,y3: integer;
a,b,c,p: real;
begin
writeln ('введите пары координат трех точек');
readln (x1, y1);
readln (x2, y2);
readln (x3, y3);
a:= sqrt (sqr(x1-x2)+sqr(y1-y2));
b:= sqrt (sqr(x2-x3)+sqr(y2-y3));
c:= sqrt (sqr(x3-x1)+sqr(y3-y1));
p:=(a+b+c) / 2;
writeln ('площадь треугольника:=', sqrt (p*(p-a)*(p-b)*(p-c)));
end.
Тест:
| Дано: | 1,2 1,5 5,2 |
| Результат: | 6 |
Задача: Определить площадь выпуклой фигуры, заданной координатами своих вершин (координаты вводятся в соответствии с последовательным обходом вершин - см. рис.10.2).
Идея решения: задачу можно решить двумя способами.
1 способ: площадь выпуклой фигуры равна сумме площадей треугольников, имеющих общую вершину:
(рис 10.2)
Программа на Бейсике:
input "введите количество вершин многоугольника"; n dim x(n), y(n) for i=1 to n input "введите пару координат"; x(i), y(i) next for i=2 to n-1 a= sqr ((x(1)-x(i))^2+(y(1)-y(i))^2) b= sqr ((x(i)-x(i+1))^2+(y(i)-y(i+1))^2) c= sqr ((x(i+1)-x(1))^2+(y(i+1)-y(1))^2) p= (a+b+c)/2 s=s+sqr (p*(p-a)*(p-b)*(p-c)) next print "площадь фигуры="; s
Программа на Паскале:
const nn=10 ;
var x,y: array [1..nn] of integer;
i, n: integer;
a, b, c, s, p: real;
begin
writeln ('введите количество вершин многоугольника');
readln (n);
for i:=1 to n do
begin
writeln (''введите пару координат');
readln (x[i], y[i]);
end;
for i:=2 to n-1 do
begin
a:= sqrt (sqr(x[1]-x[i])+sqr(y[1]-y[i]));
b:= sqrt (sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]));
c:= sqrt (sqr(x[i+1]-x[1])+sqr(y[i+1]-y[1]));
p:= (a+b+c)/2
s:=s+sqrt (p*(p-a)*(p-b)*(p-c))
end;
writeln ('площадь фигуры=', s);
end.
Тест:
| Дано: | N=5 3,2 2,5 4,7 8,5 7,1 |
| Результат: | 23.5 |
2 способ: Второй способ вычисления площади выпуклой фигуры иллюстрирует схема (рис. 10.3):
(рис 10.3)
Решите задачу этим методом самостоятельно.
Задача 3: Определить - находится точка внутри или вне выпуклого многоугольника, заданного координатами своих вершин.
Идею решения задачи иллюстрирует схема (рис.10.4):
(рис 10.4)
Программа на Бейсике:
input "введите координаты точки"; x, y input "введите количество вершин многоугольника"; n dim x(n+1), y(n+1) for i=1 to n input "введите координаты вершин"; x(i), y(i) next x(n+1)=x(1) y(n+1)=y(1) rem====================================== for i=2 to n-1 a= sqr ((x(1)-x(i))^2+(y(1)-y(i))^2) b= sqr ((x(i)-x(i+1))^2+(y(i)-y(i+1))^2) c= sqr ((x(i+1)-x(1))^2+(y(i+1)-y(1))^2) p= (a+b+c)/2 s1=s1+sqr (p*(p-a)*(p-b)*(p-c)) next rem====================================== for i=1 to n a= sqr ((x-x(i))^2+(y-y(i))^2) b= sqr ((x(i)-x(i+1))^2+(y(i)-y(i+1))^2) c= sqr ((x(i+1)-x)^2+(y(i+1)-y)^2) p= (a+b+c)/2 s2=s2+sqr (p*(p-a)*(p-b)*(p-c)) next if s1=s2 then print "точка внутри" else print "точка вне фигуры"
Программа на Паскале:
const nn=100 ;
var x,y: array [1..nn] of integer;
i,xx,yy,n: integer;
a,b,c, p, s1,s2: real;
begin
writeln ('введите координаты точки');
readln (xx,yy);
writeln ('введите количество вершин многоугольника');
readln (n);
for i:=1 to n do
begin
writeln ('введите координаты вершин');
readln (x[i], y[i]);
end;
x[n+1]:=x[1];
y[n+1]:=y[1];
for i:=2 to n-1 do
begin
a:= sqrt (sqr(x[1]-x[i])+sqr(y[1]-y[i]));
b:= sqrt (sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]));
c:= sqrt (sqr(x[i+1]-x[1])+sqr(y[i+1]-y[1]));
p:= (a+b+c) / 2;
s1:=s1+sqrt (p*(p-a)*(p-b)*(p-c));
end;
for i:=1 to n do
begin
a:= sqrt (sqr(xx-x[i])+sqr(yy-y[i]));
b:= sqrt (sqr(x[i]-x[i+1])+sqr(y[i]-y[i+1]));
c:= sqrt (sqr(x[i+1]-xx)+sqr(y[i+1]-yy));
p:= (a+b+c) / 2;
s2:=s2+sqrt (p*(p-a)*(p-b)*(p-c));
end;
if round(s1)=round(s2) then writeln ('точка внутри')
else writeln ('точка вне фигуры');
end.
Тест:
| Дано: | 5,4 5 3,2 2,5 4,7 8,5 7,1 |
10,10 5 3,2 2,5 4,7 8,5 7,1 |
| Результат: | внутри | вне |
Задача 4: Определить, пересекаются ли два отрезка, заданные на плоскости координатами своих концов (примеры взаимного расположения отрезков на рис.10.5).
(рис 10.5)
Идею решения задачи иллюстрирует схема (рис.10.6):
Отрезки пересекаются если:
(рис 10.6) Отрезки не пересекаются (рис.10.7) если …
(рис 10.7) Следует отметить, что данный метод определения пересечения двух отрезков имеет исключение, в случаях:
Программа на Бейсике:
input "введите две координаты концов 1 отрезка"; x1,y1 input "введите две координаты концов 1 отрезка"; x2,y2 input "введите две координаты концов 2 отрезка"; xx1,yy1 input "введите две координаты концов 2 отрезка"; xx2,yy2 rem=площадь первой фигуры======================= a=sqr ((xx1-xx2)^2+(yy1-yy2)^2) b=sqr ((x1-xx1)^2+(y1-yy1)^2) c=sqr ((x1-xx2)^2+(y1-yy2)^2) p= (a+b+c)/2 s1=s1+sqr (p*(p-a)*(p-b)*(p-c)) rem b=sqr ((x2-xx1)^2+(y2-yy1)^2) c=sqr ((x2-xx2)^2+(y2-yy2)^2) p= (a+b+c)/2 s1=s1+sqr (p*(p-a)*(p-b)*(p-c)) rem=площадь второй фигуры=========================== a=sqr ((x1-x2)^2+(y1-y2)^2) b=sqr ((x2-xx1)^2+(y2-yy1)^2) c=sqr ((x1-xx1)^2+(y1-yy1)^2) p= (a+b+c)/2 s2=s2+sqr (p*(p-a)*(p-b)*(p-c)) rem b=sqr ((x1-xx2)^2+(y1-yy2)^2) c=sqr ((x2-xx2)^2+(y2-yy2)^2) p= (a+b+c)/2 s2=s2+sqr (p*(p-a)*(p-b)*(p-c)) rem============================================ print s1,s2 if int(s1)=int(s2) then print "пересекаются" else print "не пересекаются"
Программа на Паскале:
var x1,x2,y1,y2,xx1,xx2,yy1,yy2: integer;
p,a,b,c,s1,s2:real;
begin
writeln ('введите две координаты концов 1 отрезка');
readln (x1,y1);
writeln ('введите две координаты концов 1 отрезка');
readln (x2,y2);
writeln ('введите две координаты концов 2 отрезка');
readln (xx1,yy1);
writeln ('введите две координаты концов 2 отрезка');
readln (xx2,yy2);
{=====площадь первой фигуры=============}
a:=sqrt (sqr(xx1-xx2)+sqr(yy1-yy2));
b:=sqrt (sqr(x1-xx1)+sqr(y1-yy1));
c:=sqrt (sqr(x1-xx2)+sqr(y1-yy2));
p:= (a+b+c)/2;
s1:=s1+sqrt (p*(p-a)*(p-b)*(p-c));
{==================================}
b:=sqrt (sqr(x2-xx1)+sqr(y2-yy1));
c:=sqrt (sqr(x2-xx2)+sqr(y2-yy2));
p:= (a+b+c)/2;
s1:=s1+sqrt (p*(p-a)*(p-b)*(p-c));
{=====площадь второй фигуры=============}
a:=sqrt (sqr (x1-x2)+ sqr (y1-y2));
b:=sqrt (sqr (x2-xx1)+ sqr (y2-yy1));
c:=sqrt (sqr (x1-xx1)+ sqr (y1-yy1));
p:= (a+b+c)/2;
s2:=s2+sqrt (p*(p-a)*(p-b)*(p-c));
{=================================}
b:=sqrt (sqr (x1-xx2)+ sqr (y1-yy2));
c:=sqrt (sqr (x2-xx2)+ sqr (y2-yy2));
p:= (a+b+c)/2;
s2:=s2+sqrt (p*(p-a)*(p-b)*(p-c));
{==================================}
writeln (s1,s2);
if round(s1)=round(s2) then writeln ('пересекаются')
else writeln ('не пересекаются');
end.
Тест:
| Дано: | 2,4 8,7 3,8 8,1 |
3,6 8,1 6,5 11,7 |
| Результат: | Пересекаются | Не пересекаются |
Для определения площади треугольника необходимо воспользоваться формулой Герона.
Для нахождения площади многоугольника потребуется найти сумму площадей треугольников, составляющих этот многоугольник.
Решение задач на определение вхождения точки в область многоугольника, пересечения двух отрезков необходимо также найти площади треугольников, составляющих фигуры.
Вопросы.
Упражнения.
Найти площадь 4-хугольника (не обязательно прямоугольника), заданного координатами своих вершин (на рис.10.8 изображен частный случай). Найти другой метод (кроме метода разбиения многоугольника на треугольники) нахождения площади этого прямоугольника.
(рис 10.8) Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.