C++ 创建X个在指定屏幕大小上彼此不相交的矩形

C++ 创建X个在指定屏幕大小上彼此不相交的矩形,c++,graphics,geometry,sdl,C++,Graphics,Geometry,Sdl,我设法通过一些帮助了解了当两个矩形相交时,从那里应该很容易做出我刚才在标题中所说的,但是 下面是我刚才所做的简短故事: 创建了一个从1到多个障碍物的for循环 在这种情况下,将创建一个随机障碍物(矩形/正方形),并将检查该障碍物是否与从0到回路控制器(或换句话说,向量中存储的每个障碍物)创建的所有其他障碍物重叠 同样,doOverLap函数也起作用。我用一个正方形做了一个控制器,并在屏幕上创建了其他随机矩形。它在聊天中输出,当我重叠它时,相信我,我从各个角度重叠了它 下面是一张有重叠问题的图片:

我设法通过一些帮助了解了当两个矩形相交时,从那里应该很容易做出我刚才在标题中所说的,但是

下面是我刚才所做的简短故事: 创建了一个从1到多个障碍物的for循环 在这种情况下,将创建一个随机障碍物(矩形/正方形),并将检查该障碍物是否与从0到回路控制器(或换句话说,向量中存储的每个障碍物)创建的所有其他障碍物重叠

同样,doOverLap函数也起作用。我用一个正方形做了一个控制器,并在屏幕上创建了其他随机矩形。它在聊天中输出,当我重叠它时,相信我,我从各个角度重叠了它

下面是一张有重叠问题的图片:

booldooverlap(A,B)
{
如果(a.x1>b.x2 | b.x1>a.x2)
返回false;
如果(a.y1>b.y2 | b.y1>a.y2)
返回false;
返回true;
}
结构障碍{
int X,Y;
无效创建随机障碍物(障碍物Obj[],int Numar_Obstacole)
{
srand(时间(空));
矩形_1;
B矩形_2;
/*避免在屏幕外渲染*/
int X_轴=X_分辨率-40;
int Y_轴=Y_分辨率-40;
int obstacolX=rand()%X_轴+1;
int obstacolY=rand()%Y_轴+1;
Obj[0].X=obstacolX;
Obj[0].Y=obstacolY;
for(int i=1;istd::cout在发生冲突时重新启动选择,例如:

bool Has_Overlap(const Obstacles& obj, const Obstacles* Objs, int Size)
{
    B Rectangle_2;
    Rectangle_2.x1 = obs.X;
    Rectangle_2.x2 = obs.X + 40;
    Rectangle_2.y1 = obs.Y;
    Rectangle_2.y2 = obs.Y + 40;
    for (int i = 0; i != Size; ++i) {
        A Rectangle_1;
        Rectangle_1.x1 = Obs[i].X;
        Rectangle_1.x2 = Obs[i].X + 40;
        Rectangle_1.y1 = Obs[i].Y;
        Rectangle_1.y2 = Obs[i].Y + 40;
        if (doOverlap(Rectangle_1, Rectangle_2)) {
            return true;
        }
    }
    return false;
}

void Create_Random_Obstacles(Obstacles* Objs, int Size)
{
    /* To avoid rendering outside of the screen */
    const int X_Axis = X_RESOLUTION - 40;
    const int Y_Axis = Y_RESOLUTION - 40;

    for (int i = 0; i < Size; i++)
    {
        do {
            Objs[i].X = rand() % X_Axis + 1;
            Objs[i].Y = rand() % Y_Axis + 1;
        } while (Has_Overlap(Objs[i], Objs, i));
    }
}
bool有重叠(常量障碍物和obj,常量障碍物*Objs,整数大小)
{
B矩形_2;
矩形_2.x1=obs.X;
矩形_2.x2=obs.X+40;
矩形_2.y1=obs.Y;
矩形_2.y2=obs.Y+40;
对于(int i=0;i!=Size;++i){
矩形_1;
矩形_1.x1=Obs[i].X;
矩形_1.x2=Obs[i].X+40;
矩形_1.y1=Obs[i].Y;
矩形_1.y2=Obs[i].Y+40;
if(doOverlap(矩形_1,矩形_2)){
返回true;
}
}
返回false;
}
无效创建\u随机\u障碍物(障碍物*Objs,整数大小)
{
/*避免在屏幕外渲染*/
常数int X_轴=X_分辨率-40;
const int Y_轴=Y_分辨率-40;
对于(int i=0;i
发生冲突时重新启动选择,例如:

bool Has_Overlap(const Obstacles& obj, const Obstacles* Objs, int Size)
{
    B Rectangle_2;
    Rectangle_2.x1 = obs.X;
    Rectangle_2.x2 = obs.X + 40;
    Rectangle_2.y1 = obs.Y;
    Rectangle_2.y2 = obs.Y + 40;
    for (int i = 0; i != Size; ++i) {
        A Rectangle_1;
        Rectangle_1.x1 = Obs[i].X;
        Rectangle_1.x2 = Obs[i].X + 40;
        Rectangle_1.y1 = Obs[i].Y;
        Rectangle_1.y2 = Obs[i].Y + 40;
        if (doOverlap(Rectangle_1, Rectangle_2)) {
            return true;
        }
    }
    return false;
}

void Create_Random_Obstacles(Obstacles* Objs, int Size)
{
    /* To avoid rendering outside of the screen */
    const int X_Axis = X_RESOLUTION - 40;
    const int Y_Axis = Y_RESOLUTION - 40;

    for (int i = 0; i < Size; i++)
    {
        do {
            Objs[i].X = rand() % X_Axis + 1;
            Objs[i].Y = rand() % Y_Axis + 1;
        } while (Has_Overlap(Objs[i], Objs, i));
    }
}
bool有重叠(常量障碍物和obj,常量障碍物*Objs,整数大小)
{
B矩形_2;
矩形_2.x1=obs.X;
矩形_2.x2=obs.X+40;
矩形_2.y1=obs.Y;
矩形_2.y2=obs.Y+40;
对于(int i=0;i!=Size;++i){
矩形_1;
矩形_1.x1=Obs[i].X;
矩形_1.x2=Obs[i].X+40;
矩形_1.y1=Obs[i].Y;
矩形_1.y2=Obs[i].Y+40;
if(doOverlap(矩形_1,矩形_2)){
返回true;
}
}
返回false;
}
无效创建\u随机\u障碍物(障碍物*Objs,整数大小)
{
/*避免在屏幕外渲染*/
常数int X_轴=X_分辨率-40;
const int Y_轴=Y_分辨率-40;
对于(int i=0;i
由于随机性的性质,最终可能会出现无法放置更多矩形的情况。在这种情况下,只需重新开始。或者,您可以使用基于物理的弹簧模拟来展开长方体并防止它们重叠。您的代码只检查将要添加的两个矩形是否重叠,但是你需要检查任何矩形之间是否有碰撞不,不,问题是我根本不理解你的代码:/2个循环,在第一个循环中创建一个矩形,当第二个循环打开时,检查所有现有障碍物是否与先前创建的矩形重叠(从第一个循环开始)由于随机性的性质,最终可能会出现无法放置更多矩形的情况。在这种情况下,请重新开始。或者,您可以使用基于物理的弹簧模拟来展开长方体并防止它们重叠。您的代码仅检查将要添加的两个矩形是否重叠,但您需要要检查任何矩形之间是否有碰撞不,问题是我根本不理解您的代码:/2个循环,在第一个循环中创建一个矩形,当第二个循环打开时,检查所有现有障碍物是否与先前创建的矩形重叠(从第一个循环开始)