IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Найти площадь четырехугольника по координатам точки
Dranik7
сообщение 10.10.2010 20:25
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

Репутация: -  0  +


Даны 4 точки на плоскости, образующие выпуклый четырехугольник и точка внутри этого 4-угольника. Все точки заданы своими координатами. Найдите площадь этого четырехугольника.

Пожалуйста помогите решить

Сообщение отредактировано: Dranik7 - 10.10.2010 20:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
sheka
сообщение 10.10.2010 20:32
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


В 9м классе на пары математики ходил? Вот и решай. Хотя бы свои идеи выдавай.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 10.10.2010 21:00
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> и точка внутри этого 4-угольника

Не нужна

Площадь 4угольника ABCD равно сумме площадей треугольников ABC и CDA. А площадь треугольника ABC равна половине площади параллелограмма, натянутого на вектора AB и AC. А площадь паралелограмма сам рассчитай, формула должно простая получиться.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dranik7
сообщение 10.10.2010 22:53
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

Репутация: -  0  +


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.


Вот сделал что смог,
неполучается выразить формулу
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 10.10.2010 23:11
Сообщение #5


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


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 тут угадай какой тебе тип подскажет Паскаль?;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 10.10.2010 23:21
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> TarasBer, неужели выводить синусы итд?
> Используй, наверное, формулу Герона. (сделай ее функцией)

ппц

g Векторное произведение


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 10.10.2010 23:26
Сообщение #7


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Точно smile.gif
Это как раз учат в 10м классе)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 10.10.2010 23:33
Сообщение #8


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Почувствуй разницу между 4 вычислениями квадратного корня (у куче умножений, вычитаний итд) в формуле Герона и 2 умножениями и 1 вычитанием в нормальной формуле.

Это же так просто - нарисовать параллелограмм на бумаге, дополнить его до прямоугольника со сторонами, параллельными координатам, разбить дополнение на прямоугольные треугольники со сторонами, параллельными координатам, вычилить все площади по простейшим формулам, скомпоновать и получить простой ответ.
Да и выражение из формулы Герона наверняка можно упростить чисто алгебраическими методами, если порасписывать да скобки пораскрывать на 5 страниц мелким почерком. Просто прежде, чем скармливать компьютеру выражение, надо сначала на бумаге посмотреть, можно ли его упростить.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 11.10.2010 3:41
Сообщение #9


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


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


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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dranik7
сообщение 11.10.2010 5:40
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской

Репутация: -  0  +


Вот что у меня получилось

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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 11.10.2010 8:51
Сообщение #11


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Вот что у меня получилось

Препода это устроит, но это не дело.
Уже второй раз вижу этот кошмарный метод вычисления площади.
Так вот, площадь треугольника ((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 результатов берём максимальный по модулю.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 11.08.2025 1:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"