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

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

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

> Применение процедур при решении задач
сообщение
Сообщение #1


Хакер
*

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

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


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

Есть какие-нить предположения? blink.gif blink.gif blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 18)
сообщение
Сообщение #2


mea culpa
*****

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

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


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


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


Хакер
*

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

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


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


mea culpa
*****

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

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


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


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


Бывалый
***

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

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


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

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


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

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


Хакер
*

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

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


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

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


Хакер
*

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

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


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

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


mea culpa
*****

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

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


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


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


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


Хакер
*

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

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


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

Изображение

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


Гость






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

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

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


Хакер
*

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

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


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


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


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

Процедуры, говоришь? Тут не процедуры, а функции надо использовать... Тебе в любом случае нужен результат: либо функция должна возвращать площадь треугольника, либо ответ True/False (внутри/снаружи, в смысле). Процедуры тут на фиг не нужны. Не надо пользоваться теми средствами, которые для решения задачи не подходят.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;

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


Гость






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

А какая разница? Это же одно и то же.
Это только в синтаксисе Паскаля зачем-то сделали ненужное различие.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


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

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

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


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


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


Хакер
*

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

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


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


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

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

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


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


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


Хакер
*

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

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


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

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

 





- Текстовая версия 19.05.2024 8:31
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name