正方形C++中的点

Point within a Square C++

本文关键字:C++ 正方形      更新时间:2023-10-16

我正试图用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.55)和三个点(1,1)/(2,2)/(3,3)的正方形)我假设最好的做法是使用getline,然后解析输入。

如果至少有一个点在正方形之外,则输出为true或false。

我很难理解这一点,我真的很感激帮助。

对于输入,我建议查找Inserter interator。

类似以下内容:

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

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