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


Автор: Sergio 26.6.2011, 18:05
Здравствуйте,

помогите пожалуйста с написанием функции:
Код

- (BOOL)isFigure:(Figure)figure containsPoint:(CGPoint)point;


Нужно узнать принадлежит ли точка фигуре? Фигура ввиде правильного ромба.
Действие происходит на осях X, Y

Заранее спасибо.

Автор: _Y_ 26.6.2011, 18:37
Что-то я геометрию школьную забыл. Бывают разве ромбы "неправильные"?

Вообще же методов должно быть немеряно. Тем более, что ромб - фигура выпуклая и, поэтому, все с ней просто.

Например так: 
  • Соединяем точку отрезком с центром ромба (или с любой другой точкой внутри ромба - не важно).
  • Проверяем пересекается ли этот отрезок с каким-нибудь отрезком, образующим стороны ромба.
  • Если не пересекается - точка внутри.

Автор: Skevalt 26.6.2011, 18:39
Можно сделать следующим образом: см. http://img-fotki.yandex.ru/get/5304/vulfin-alexey.0/0_7e2ca_53e55f4e_L.jpg
Тогда условием принадлежности точки фигуре будет: (Yp <= u(Xp)) AND (Yp >= d(Xp))
Также, можно определять ромб и не через длины диагоналей, а через уравнение прямой, проходящей через две точки, откуда необходимо найти коэффициент угла наклона b/a.
p.s. Ромб можно перенести в любую точку, используя параллельный перенос.
p.p.s. Если совсем не заморачиваться, то взять код http://www.e-maxx.ru/algo/pt_in_polygon

Автор: Dottik 1.7.2011, 10:36
Или же соеденить точку с 4-мя вершинами => получаем 4 треугольника => если сумма их площадей ровна площаде ромба то точка внутри.

Автор: _Y_ 4.7.2011, 11:49
Мне понравилось. Давайте сделаем из этой темы флейм на тему сколькими методами можно решить данную задачу smile  Думаю неслабая ветка получится.

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