Помощь - Поиск - Пользователи - Календарь
Полная версия: Найти площадь четырехугольника по координатам точки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Dranik7
Даны 4 точки на плоскости, образующие выпуклый четырехугольник и точка внутри этого 4-угольника. Все точки заданы своими координатами. Найдите площадь этого четырехугольника.

Пожалуйста помогите решить
sheka
В 9м классе на пары математики ходил? Вот и решай. Хотя бы свои идеи выдавай.
TarasBer
> и точка внутри этого 4-угольника

Не нужна

Площадь 4угольника ABCD равно сумме площадей треугольников ABC и CDA. А площадь треугольника ABC равна половине площади параллелограмма, натянутого на вектора AB и AC. А площадь паралелограмма сам рассчитай, формула должно простая получиться.
Dranik7
function dl(x1,x2,y1,y2:integer):integer;
begin
dl:=trunc(sqrt(sqr(y2-y1)+sqr(x2-x1)));
end;
var
s,a,b,c,d,x1,x2,x3,x4,y1,y2,y3,y4:integer;
begin
readln(x1,y1);
readln(x2,y2);
readln(x3,y3);
readln(x4,y4);
a:=dl(x1,y1,x2,y2);
b:=dl(x2,y2,x3,y3);
c:=dl(x3,y3,x4,y4);
d:=dl(x4,y4,x1,y1);
S:= ФОРМУЛА
writeln(s);
readln;
end.


Вот сделал что смог,
неполучается выразить формулу
sheka
TarasBer, неужели выводить синусы итд?
Используй, наверное, формулу Герона. (сделай ее функцией)
function герон(длина1,длина2,длина3);

ответ=
герон(dl(xa,ya,xb,yb),dl(xb,yb,xc,yc),dl(xa,ya,xc,yc))+
герон(dl(xc,yc,xd,yd),dl(xd,yd,xa,ya),dl(xa,ya,xc,yc));

Заметь, я использовал чуть подругому твою функцию:
function dl(x1,y1,x2,y2:integer):a тут угадай какой тебе тип подскажет Паскаль?;
TarasBer
> TarasBer, неужели выводить синусы итд?
> Используй, наверное, формулу Герона. (сделай ее функцией)

ппц

g Векторное произведение
sheka
Точно smile.gif
Это как раз учат в 10м классе)
TarasBer
Почувствуй разницу между 4 вычислениями квадратного корня (у куче умножений, вычитаний итд) в формуле Герона и 2 умножениями и 1 вычитанием в нормальной формуле.

Это же так просто - нарисовать параллелограмм на бумаге, дополнить его до прямоугольника со сторонами, параллельными координатам, разбить дополнение на прямоугольные треугольники со сторонами, параллельными координатам, вычилить все площади по простейшим формулам, скомпоновать и получить простой ответ.
Да и выражение из формулы Герона наверняка можно упростить чисто алгебраическими методами, если порасписывать да скобки пораскрывать на 5 страниц мелким почерком. Просто прежде, чем скармливать компьютеру выражение, надо сначала на бумаге посмотреть, можно ли его упростить.
Lapp
Я согласен с Тарасом по поводу вычисления площади - на координатной сетке и в 10-м классе можно найти более эффективные методы вычисления площади, чем Герон. Но в одном я бы все же уточнил..
Цитата(TarasBer @ 10.10.2010 22:00) *
Площадь 4угольника ABCD равно сумме площадей треугольников ABC и CDA
Тарас, никто не сказал, что точки перечислены в порядке обхода выпуклого 4-угольника. В условии сказано "даны точки, образующие выпуклый четырехугольник", а не "дан выпуклый четырехугольник ABCD". Поэтому их придется сначала расположить в нужном порядке..


Добавлено через 2 мин.
P.S.
зачем дана внутренняя точка, остается загадкой природы..
Dranik7
Вот что у меня получилось

function dl(x1,x2,y1,y2:integer):integer;
begin
dl:=trunc(sqrt(sqr(y2-y1)+sqr(x2-x1)));
end;
var
p2,a,b,c,d,x1,x2,x3,x4,y1,y2,y3,y4:integer;
poly1,poly2,s1,s2,s:real;
begin
readln(x1,y1);
readln(x2,y2);
readln(x3,y3);
readln(x4,y4);
a:=dl(x1,y1,x2,y2);
b:=dl(x2,y2,x3,y3);
c:=dl(x3,y3,x4,y4);
d:=dl(x4,y4,x1,y1);
poly1:=(a+b+c)/2;
poly2:=(a+c+d)/2;
S1:=sqrt(poly1*(poly1-a)*(poly1-b)*(poly1-c));
s2:=sqrt(poly2*(poly1-a)*(poly2-c)*(poly2-d));
s:=S1+s2;

writeln(s:1:1);
readln;
end.
TarasBer
> Вот что у меня получилось

Препода это устроит, но это не дело.
Уже второй раз вижу этот кошмарный метод вычисления площади.
Так вот, площадь треугольника ((x1,y1),(x2,y2),(x3,y3)) равна
0.5*abs( (x3-x1)*(y2-y1) - (x2-x1)*(y3-y1) )
Учите векторную алгебру и геометрические свойства скалярных и векторных произведений.

Добавлено через 6 мин.
> Тарас, никто не сказал, что точки перечислены в порядке обхода выпуклого 4-угольника.

Блин, точно. Внутренняя точка тут не поможет никак.
Значит, есть 3 способа расположить эти точки по кругу -
ABCD
ACBD
ACDB
Для каждого из них считаем площадь 4-угольника, разбивая её на 2 треугольника, но площади треугольников берём со знаком.
Из 3 результатов берём максимальный по модулю.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.