Опубликован: 21.03.2012 | Доступ: свободный | Студентов: 2804 / 169 | Оценка: 4.44 / 4.19 | Длительность: 06:43:00
Специальности: Программист
Лекция 11:

Задачи, сгруппированные по методам решения. Все через площадь треугольника

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Аннотация: На вычислении площади треугольника базируются многие геометрические задачи. В лекции рассматриваются примеры геометрических задач, в основе решения которых лежит вычисление площади треугольника. Цель лекции: научиться применять изученные методы при решении геометрических задач.

Рассмотрим решение базовой задачи.

Задача : Найти площадь треугольника, заданного координатами своих вершин (рис.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.
< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Александр Шнайдман
Александр Шнайдман
Израиль, Тель Авив