Есть какие-нить предположения?



1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
zoha |
![]() ![]()
Сообщение
#1
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Даны координаты трех вершин треугольника ABC и даны координаты четвертой точки D. Определить, является ли эта точка внутренней точкой треугольника.
Есть какие-нить предположения? ![]() ![]() ![]() |
Unconnected |
![]()
Сообщение
#2
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
На олимпиадах подобные задачи часто решают следующим образом: "проводят" от точки D к вершинам треугольника три вектора и считают суммарную площадь трех образовавшихся треугольников. Если она больше площади исходного, то...
-------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
zoha |
![]()
Сообщение
#3
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
а исходник можно?
|
Unconnected |
![]()
Сообщение
#4
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
У меня нет исходника
![]() Попробуй сам начать. Знаешь, как найти длину вектора по координатам его концов? -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
DarkWishmaster |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 168 Пол: Мужской Репутация: ![]() ![]() ![]() |
На олимпиадах подобные задачи часто решают следующим образом: "проводят" от точки D к вершинам треугольника три вектора и считают суммарную площадь трех образовавшихся треугольников. Если она больше площади исходного, то... А на сколько точен это метод, ведь есть неточности с корнем и.т Поискал в гугле, вот что нашел: Обычно задачи на принадлежность точки многоугольнику (произвольному) решаются так: проводится луч (обычно какого-нибудь простого вида, например налево или направо) из точки, принадлежность которой мы проверяем. считается количество пересечений со сторонами многоугольника, причем, если пересечение в нижней точке стороны, то она не учитывается, а в верхней - учитывается. А как вообще это сделать? луч провести Сообщение отредактировано: DarkWishmaster - |
zoha |
![]()
Сообщение
#6
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Идея: Пусть есть треугольник ABC и точка D. Если Площадь ABC равна сумме
площадей треугольников ABD,BCD,CAD, то точка внутри треугольника. Сообщение отредактировано: zoha - |
zoha |
![]()
Сообщение
#7
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Примерная иллюстрация задачи, если это верно?
![]() |
Unconnected |
![]()
Сообщение
#8
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата А на сколько точен это метод, ведь есть неточности с корнем и.т Типа real вполне хватит. Да и везде подобные неточности.. А гугловый способ не очень понял. Если треугольник внизу и маленький, а точка с координатами (1000, 1000), куда его вести, спрашивается.. попасть ещё надо) Хотя, может, можно с уравнениями прямых-сторон поколдовать. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
zoha |
![]() ![]()
Сообщение
#9
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Примерная иллюстрация задачи, если это верно?
![]() Сообщение отредактировано: zoha - |
-TarasBer- |
![]()
Сообщение
#10
|
Гость ![]() |
> А на сколько точен это метод, ведь есть неточности с корнем и.т
Каким корнем? Ты чё, площадь треугольника Героном берёшь? На самом деле всё ещё проще - если площадки треугольников DAB, DBC, DCA одного знака, то внутри, если есть разного - то снаружи. |
zoha |
![]()
Сообщение
#11
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
люди можно фрагмент процедуры?
|
IUnknown |
![]()
Сообщение
#12
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Ада: Разработчик Embarcadero Delphi: Сторонник Free Pascal: Разработчик Репутация: ![]() ![]() ![]() |
Цитата Даны координаты трех вершин треугольника ABC и даны координаты четвертой точки D. Определить, является ли эта точка внутренней точкой треугольника. Как узнать принадлежностьПроцедуры, говоришь? Тут не процедуры, а функции надо использовать... Тебе в любом случае нужен результат: либо функция должна возвращать площадь треугольника, либо ответ True/False (внутри/снаружи, в смысле). Процедуры тут на фиг не нужны. Не надо пользоваться теми средствами, которые для решения задачи не подходят. |
-TarasBer- |
![]()
Сообщение
#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- |
![]()
Сообщение
#14
|
Гость ![]() |
> Тут не процедуры, а функции надо использовать...
А какая разница? Это же одно и то же. Это только в синтаксисе Паскаля зачем-то сделали ненужное различие. |
zoha |
![]()
Сообщение
#15
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
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.
поясните что здесь что? |
TarasBer |
![]()
Сообщение
#16
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Читай с самого начала: http://lib.mexmat.ru/books/14621
-------------------- |
zoha |
![]()
Сообщение
#17
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
_eps = 1E-7;
ето число Е? |
TarasBer |
![]()
Сообщение
#18
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
-------------------- |
zoha |
![]()
Сообщение
#19
|
![]() Хакер ![]() Группа: Пользователи Сообщений: 49 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всем спасибо!!!
|
![]() ![]() |
![]() |
Текстовая версия | 16.04.2025 21:53 |