長方形とユーザーが決定したポリゴンの数を指定して、それらが長方形の内側、外側、または交差しているかどうかを認識し、そのポリゴンの数を提供するアルゴリズムを実装しようとしています。
アルゴリズムをコーディングして動作しましたが、コンパイルの直後に開始するのに少なくとも 20 秒かかることに気付きました (これは、2 番目、3 番目、またはその他の時間に開始した場合には発生しません)。
何がコードを非常に遅くしているのかを突き止めようとしたところ、四角形に対するポリゴンの位置を決定する関数の呼び出しを削除すると、プログラムが即座に実行されることに気付きました。
私は何か間違っていることを見つけようとしましたが、何も見つかりませんでした
ここにあります
// struct used in the function
struct Polygon
{
int ** points;
int vertices;
};
// inside, outside and over are the number of polygons that are inside, outside or intersect the rectangle,
// they're initialized to 0 in the main.
// down_side, up_side are the y_coordinate of the two horizontals sides.
// left_side, right_side are the x_coordinate of the two vertical sides.
void checkPolygons( Polygon * polygon, int & inside, int & outside, int & over, unsigned int polygons, const unsigned int down_side, const unsigned int up_side, const unsigned int left_side, const unsigned int right_side )
{
for ( unsigned int pol = 0; pol < polygons; ++pol )
{
unsigned int insideVertices = 0;
unsigned int vertices = polygon[ pol ].vertices;
for ( unsigned int point = 0; point < vertices; ++point )
{
unsigned int x_coordinate = polygon[ pol ].points[ point ][ 0 ];
unsigned int y_coordinate = polygon[ pol ].points[ point ][ 1 ];
if ( ( x_coordinate <= right_side ) and ( x_coordinate >= left_side ) and ( y_coordinate <= up_side ) and ( y_coordinate >= down_side ) )
{
insideVertices++;
}
}
if ( insideVertices == 0 )
++outside;
else if ( insideVertices == vertices )
++inside;
else
++over;
}
}