Математика. Точка в ломаной фигуре

Тема в разделе "Мегафлуд", создана пользователем vanderv, 7 май 2012.

Статус темы:
Закрыта.
  1. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    267
    Симпатии:
    12
    Есть фигура, которая состоит из точек (x,y). Надо узнать, находится ли данная точка в этой фигуре. Может есть формула вычисления?
     
  2. dmx

    dmx

    Регистр.:
    22 июн 2011
    Сообщения:
    662
    Симпатии:
    526
    х у - это прямая.
    Фигура не может состоять из 2 точек
     
  3. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    267
    Симпатии:
    12
    x,y это точка а не прямая. Я дал понять, что это двухмерное измерение.
    Специально для тебя - есть фигура (x1,y1; x2,y2; .... xn,yn)
     
  4. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    267
    Симпатии:
    12
    Нашел формулу на c++
    Блин как только перевести это в php?
    Кому не сложно, с меня wmr
    Код:
    template bool pt_in_polygon2(const T &test,const std::vector &polygon)
    {
     
    static const int q_patt[2][2]= { {0,1}, {3,2} };
     
    if (polygon.size()<3) return false;
     
    std::vector::const_iterator end=polygon.end();
    T pred_pt=polygon.back();
    pred_pt.x-=test.x;
    pred_pt.y-=test.y;
     
    int pred_q=q_patt[pred_pt.y<0][pred_pt.x<0];
     
    int w=0;
     
    for(std::vector::const_iterator iter=polygon.begin();iter!=end;++iter)
    {
    T cur_pt = *iter;
     
    cur_pt.x-=test.x;
    cur_pt.y-=test.y;
     
    int q=q_patt[cur_pt.y<0][cur_pt.x<0];
     
    switch (q-pred_q)
    {
    case -3:++w;break;
    case 3:--w;break;
    case -2:if(pred_pt.x*cur_pt.y>=pred_pt.y*cur_pt.x) ++w;break;
    case 2:if(!(pred_pt.x*cur_pt.y>=pred_pt.y*cur_pt.x)) --w;break;
    }
     
    pred_pt = cur_pt;
    pred_q = q;
     
    }
     
    return w!=0;
     
    }
     
Статус темы:
Закрыта.