Точка в квадрате C ++ - PullRequest
       28

Точка в квадрате C ++

0 голосов
/ 07 февраля 2012

Я пытаюсь решить эту проблему, используя c ++.

Проблема: Учитывая набор (x, y) координат на евклидовой геометрической плоскости и набор из четырех (x, y) координат, которые определяют квадрат, мне нужно определить, содержатся ли все точки в определенном квадрате. Точки, которые находятся по сторонам квадрата или по углам квадрата, считаются точками в квадрате. Квадрат не обязательно параллелен осям.

Ввод немного интересен, и подсказок нет, просто ввод строгих координат.

Ввод: набор разделенных запятыми (x, y) координат, разделенных пробелами. Первые четыре координаты определяют углы квадрата (в произвольном порядке), а остальные координаты, разделенные запятыми, будут точками.

Так, например: 0,0 0,5 5,0 5,5 1,1 2,2 3,3 (Определяет квадрат с углами (0,0) / (0,5) / (5,0) / (5,5) и тремя точками (1,1) / (2,2) / (3,3)) Я предполагаю, что лучший способ действия - это использовать getline, а затем проанализировать ввод.

Вывод имеет значение true или false, если хотя бы одна точка находится за пределами квадрата.

Было трудно пытаться обернуть голову вокруг этого, и я действительно ценю помощь.

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Для ввода я рекомендую поискать Интеграторы интеграторов .

Что-то вроде следующего:

#include <iostream>
#include <iterator>
#include <vector>

class point
{
public:
  friend
  std::istream& 
  operator>>(std::istream& in, point& data)
  { 
    char separator;
    in >> data.m_x >>separator >>data.m_y ;
  }

  friend
  std::ostream&
  operator<<(std::ostream& out, point& data)
  { 
    out<< "("<<data.m_x<<','<<data.m_y<<")";
    return out;
  }
private:
  double m_x, m_y;
};

int
main  (int ac, char **av)
{

  std::vector<point> buffer;

  std::copy( 
            std::istream_iterator<point>(std::cin), 
            std::istream_iterator<point>( ),
        std::back_inserter(buffer)); // copies all data into buffer

  std::cout<<"buffer size = "<<buffer.size()<<std::endl;

  for(size_t i=0;i<buffer.size();++i){
    std::cout<<buffer[i]<<std::endl;
  }
}

Использование:

./a.out
1,2 3,4 5,6 q
buffer size = 3
(1,2)
(3,4)
(5,6)
1 голос
/ 07 февраля 2012

Если у вас возникли проблемы с анализом кода, покажите, что у вас есть.Когда ваш синтаксический анализ работает, вот отличное решение для определения, находится ли точка внутри какого-либо многоугольника: http://alienryderflex.com/polygon/

...