指向Square C ++

时间:2012-02-07 17:55:37

标签: c++ parsing input geometry coordinates

我正在尝试使用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 个答案:

答案 0 :(得分:1)

如果您在解析代码时遇到问题,请展示您目前所拥有的内容。当你的解析工作时,这是一个很棒的解决方案来确定一个点是否在任何多边形内: http://alienryderflex.com/polygon/

答案 1 :(得分:1)

对于输入,我建议查找Inserter interators

如下所示:

#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)