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

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

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

 
 Ответить  Открыть новую тему 
> Применение процедур при решении задач
zoha
сообщение 21.05.2011 17:35
Сообщение #1


Хакер
*

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

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


Даны координаты трех вершин треугольника ABC и даны координаты четвертой точки D. Определить, является ли эта точка внутренней точкой треугольника.

Есть какие-нить предположения? blink.gif blink.gif blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 21.05.2011 17:44
Сообщение #2


mea culpa
*****

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

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


На олимпиадах подобные задачи часто решают следующим образом: "проводят" от точки D к вершинам треугольника три вектора и считают суммарную площадь трех образовавшихся треугольников. Если она больше площади исходного, то...


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zoha
сообщение 21.05.2011 17:53
Сообщение #3


Хакер
*

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

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


а исходник можно?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 21.05.2011 18:02
Сообщение #4


mea culpa
*****

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

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


У меня нет исходника smile.gif
Попробуй сам начать. Знаешь, как найти длину вектора по координатам его концов?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 21.05.2011 18:53
Сообщение #5


Бывалый
***

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

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


Цитата(Unconnected @ 21.05.2011 18:02) *

На олимпиадах подобные задачи часто решают следующим образом: "проводят" от точки D к вершинам треугольника три вектора и считают суммарную площадь трех образовавшихся треугольников. Если она больше площади исходного, то...


А на сколько точен это метод, ведь есть неточности с корнем и.т
Поискал в гугле, вот что нашел:
Обычно задачи на принадлежность точки многоугольнику (произвольному) решаются так: проводится луч (обычно какого-нибудь простого вида, например налево или направо) из точки, принадлежность которой мы проверяем. считается количество пересечений со сторонами многоугольника, причем, если пересечение в нижней точке стороны, то она не учитывается, а в верхней - учитывается.
А как вообще это сделать? луч провести

Сообщение отредактировано: DarkWishmaster - 21.05.2011 18:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zoha
сообщение 21.05.2011 19:07
Сообщение #6


Хакер
*

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

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


Идея: Пусть есть треугольник ABC и точка D. Если Площадь ABC равна сумме
площадей треугольников ABD,BCD,CAD, то точка внутри треугольника.

Сообщение отредактировано: zoha - 21.05.2011 20:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zoha
сообщение 21.05.2011 20:12
Сообщение #7


Хакер
*

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

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


Примерная иллюстрация задачи, если это верно?

Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 21.05.2011 23:08
Сообщение #8


mea culpa
*****

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

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


Цитата
А на сколько точен это метод, ведь есть неточности с корнем и.т


Типа real вполне хватит. Да и везде подобные неточности..
А гугловый способ не очень понял. Если треугольник внизу и маленький, а точка с координатами (1000, 1000), куда его вести, спрашивается.. попасть ещё надо) Хотя, может, можно с уравнениями прямых-сторон поколдовать.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zoha
сообщение 22.05.2011 11:50
Сообщение #9


Хакер
*

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

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


Примерная иллюстрация задачи, если это верно?

Изображение

Сообщение отредактировано: zoha - 22.05.2011 11:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-TarasBer-
сообщение 22.05.2011 12:18
Сообщение #10


Гость






> А на сколько точен это метод, ведь есть неточности с корнем и.т

Каким корнем?
Ты чё, площадь треугольника Героном берёшь?

На самом деле всё ещё проще - если площадки треугольников DAB, DBC, DCA одного знака, то внутри, если есть разного - то снаружи.
 К началу страницы 
+ Ответить 
zoha
сообщение 22.05.2011 16:57
Сообщение #11


Хакер
*

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

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


люди можно фрагмент процедуры?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 22.05.2011 17:09
Сообщение #12


a.k.a. volvo877
*****

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

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


Цитата
Даны координаты трех вершин треугольника ABC и даны координаты четвертой точки D. Определить, является ли эта точка внутренней точкой треугольника.
Как узнать принадлежность

Процедуры, говоришь? Тут не процедуры, а функции надо использовать... Тебе в любом случае нужен результат: либо функция должна возвращать площадь треугольника, либо ответ True/False (внутри/снаружи, в смысле). Процедуры тут на фиг не нужны. Не надо пользоваться теми средствами, которые для решения задачи не подходят.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
-TarasBer-
сообщение 22.05.2011 17:38
Сообщение #13


Гость






По ссылке формула

(a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2;

Лучше её записать в виде

((b.x-a.x)*(c.y-a.y) - (b.y-a.y)*(c.x-a.x))/2;

Чтобы сразу было видно векторное произведение.
Ну и на одно умножение меньше.
 К началу страницы 
+ Ответить 
-TarasBer-
сообщение 22.05.2011 17:40
Сообщение #14


Гость






> Тут не процедуры, а функции надо использовать...

А какая разница? Это же одно и то же.
Это только в синтаксисе Паскаля зачем-то сделали ненужное различие.
 К началу страницы 
+ Ответить 
zoha
сообщение 22.05.2011 18:15
Сообщение #15


Хакер
*

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

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


 program point_in_treug;
const _eps = 1E-7;
type TPoint = record
x,y : real;
end;

var a,b,c,p : TPoint;
s,s1,s2,s3 : real;

function sq_treug(a,b,c : TPoint) : real;
begin
sq_treug := (a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y)) / 2;
end;

begin
read(a.x,a.y);
read(b.x,b.y);
read(c.x,c.y);
read(p.x,p.y);
s := abs (sq_treug(a,b,c));
s1 := abs (sq_treug(a,b,p));
s2 := abs (sq_treug(a,p,c));
s3 := abs (sq_treug(p,b,c));
if abs (s - s1 - s2 - s3) < _eps then writeln('point is inside the triangle')
else writeln('point is outside the triangle');
end.



поясните что здесь что?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 22.05.2011 19:05
Сообщение #16


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

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

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


Читай с самого начала: http://lib.mexmat.ru/books/14621


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zoha
сообщение 23.05.2011 16:38
Сообщение #17


Хакер
*

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

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


 _eps = 1E-7;
ето число Е?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 23.05.2011 16:43
Сообщение #18


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

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

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


http://ru.wikipedia.org/wiki/Экспоненциальная_запись


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
zoha
сообщение 29.05.2011 10:27
Сообщение #19


Хакер
*

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

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


Всем спасибо!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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