Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Задачка


Автор: ubiy 7.5.2004, 18:18
1. Даны координаты вершин четырехугольника и
координаты точки. Определить, находится ли точка
внутри четырехугольника.
2. Написать вариант функции calloc(), используя
функцию malloc().

Автор: Golod 8.5.2004, 09:00
По-поводу 1-й задачки, если тебе даны координаты точек, то ты можешь построить сам 4-х угольник, и, например закрасить его. Затем проверяешь координаты точки на цвет, если они совпадают с цветом заливки, то точка попала, если нет, то нет. В Pascal'e это делается элементарно.

Автор: Dr.Drunk 10.5.2004, 10:13
ubiy, по поводу 2 задачки.
На сколько я помню, calloc() - переопределение дин. памяти
а malloc - выделение.

Тогда алгоритм примерно таков
Есть дин. массив который надо увеличить/уменьшить
Вызываешь свою функцию
    - через malloc выделяешь память
    - копируешь в выделенный кусок исх. массив
    - возвращает указатель на нов. массив

Если нов. массив больше старого, то нужно занулить элементы за последним из старого, чтобы в них "мусора" не было.


Автор: Secandr 10.5.2004, 10:40
Golod Зачем такие сложности? и ещё, если я дам координаты -10000,10000,-998,999 и точку 50,50 smile.gif

ubiy
Первая задача:
Код
пусть x,y - координаты точки, x1,y1,x2,y2 - координаты четырёхугольника.
Если (x1<x<x2) и (y1<y<y2) то поподает

Предворительно можно тосортировать x1,x2 и y1,y2 по возрастанию.

Автор: dargaard 10.5.2004, 13:16
Secandr
С каких пор 4-угольник (а не прямоугольник) описывается 2 координатами?


ubiy
А вообще просто надо правильно разбить 4х угольник на 2 треугольника (правильно разбить так как 4х угольник может быть вогнутым). после этого задача сводится к нахождению точки в двух треугольниках.


здесь алгоритм о точке и треугольнике
http://mcraefamily.com/MathHelp/GeometryPointAndTriangle2.htm

тут есть алгоритм о точке и многоугольнике
http://www.dfanning.com/tips/point_in_polygon.html


Автор: Secandr 10.5.2004, 17:01
dargaard Скажем так - этостандартная олимпиадная задача.

Хотя в общем случае я конечно неправ.

Автор: ubiy 13.5.2004, 08:10
Блаходарю. Буду пробовать.

Автор: Гость_Eugene 13.5.2004, 08:38
Hello, ALL !

2 Dr.Drunk

По поводу calloc() вы ошиблись. Она выделяет память точно так-же
как и malloc(), но есть отличие. Перераспределяет память realloc() !

2 Ubiy

Читайте доку по библ-м функциям С .

Удачи !

Автор: ubiy 17.5.2004, 08:51
2 Dr.Drunk

Не совсем понятно, как этот алгоритм написать.

2 Гость_Eugene

Может знаешь, как решить 2 задачу.

Автор: Гость_Eugene 17.5.2004, 09:35
Посмотрев _синтаксис_ вызова обеих ф-ций, ты и сам её решишь wink.gif
И не забудь, что calloc _чистит_ выделяемую память.

Удачи !

Автор: maxim1000 17.5.2004, 11:27
можно попробовать что-то вроде этого:
есть прямоугольник ABCD (имена вершин - последовательно, т.е. ребра AB,BC,CD,DA), и точка E
для того, чтобы точка была внутри пр. достаточно, чтобы
(AB,AE)>0
(AD,AE)>0
(CD,CE)>0
(CB,CE)>0

Автор: DenDen 18.5.2004, 00:00
1.А не проще ли самая дальняя вершина отстоит от точки на величину большую самой длинной стороне прямоугольника?
(не рабоет для невыпуклых многоугольников)
2. свести задачу к 2 треугольникам
3. maxim1000,respect довольно остроумно

Автор: Dr.Drunk 18.5.2004, 10:22
2 Гость_Eugene, ну так давненько уже в С не программил smile.gif






Автор: Гость_Eugene 19.5.2004, 13:06
Да нет, всё более на "приплюснутом", wink.gif в Linux-e.

Удачи !

Автор: ubiy 21.5.2004, 08:19
2 Гость_Eugene

Нет, не понятно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)