我正在尝试使用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。
试图绕过这个很困难,我真的很感激帮助。
答案 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)