确定矩形是否重叠,如果是,则返回重叠矩形区域与给定集​​合的比较

时间:2014-03-20 22:23:22

标签: c

我是一名初级程序员,正在为自己进行初级测试,以掌握使用C语言的核心价值。我有一个测试用例,并且不知道从哪里开始构建它以便用GCC进行编译。我有一个基本的理论和伪代码摘要,但主要需要一点帮助。

我已经搜索了这个问题的相关问题和排列,并且无法对C的逻辑做出正面或反面。

给出以下逻辑:

  

使用C语言,具有OverlappingRectangles(strArr)函数   读取传递的strArr参数,该参数代表两个   笛卡尔坐标平面上的矩形,将包含8   坐标与前4个组成矩形1和后4个   组成rectange 2.它将采用以下格式:   "(0,0),(2,2),(2,0),(0,2),(1,0),(1,2),(6,0),(6,2 )&#34。你的程序应该   确定两个矩形重叠的空间区域,和   然后输出这个重叠区域可以适应的次数   第一个矩形。对于上面的例子,重叠区域   组成一个区域2的矩形,和第一个矩形(前4个   坐标)组成一个区域4的矩形,所以你的程序应该   输出2.坐标都是整数。如果没有重叠   两个矩形之间返回0。

我输了。

首先应该添加这个:

  1. 给定一个字符串(n1,n2,n3,n4,m1,m2,m3,m4)
  2. 将字符串拆分为string1(n1,n2,n3,n4)string2(m1,m2,m3,m4)
  3. 如果n1 + n4&lt; m1或n2 + n3 < m2或m1 + m4&lt; n1或m2 + m3&lt; m1
  4. 计算交叉矩形的面积并划分为第一个矩形的面积。
  5. 其他
  6. 打印0

1 个答案:

答案 0 :(得分:0)

你有一个表格的字符串:

(x1,y1)(x2,y2)(x2,y1)(x1,y2)(x3,y3)(x4,y4)(x4,y3)(x3,y4)

定义2个矩形:

r1 = (x1,y1) to (x2,y2)
r2 = (x3,y3) to (x4,y4)

您需要先:

  1. 定义矩形的表示(结构)
  2. 解析(读取)字符串以提取x1 - x4y1 - y4的数字 - 例如sscanf及其执行此操作的返回值
  3. 您可以创建辅助函数,例如:

    const char *parse_rectangle(const char *str, rectangle *r);
    

    这将以r形式从str读取一个矩形(x1,y1)(x2,y2)(x2,y1)(x1,y2)(x3,y3)(包括任何验证)并返回指向下一个字符的指针。

    现在,你将有两个矩形。

    然后,您可以将这些矩形的交集计算为第三个矩形,例如:

    int intersection(const rectangle *r1, const rectangle *r2, rectangle *result);
    

    如果矩形相交则返回1,如果不相交则返回0并用交叉点填充result。如果您使用的是C99,则可以使用_Bool代替。

    现在,您需要一个计算区域的函数,例如:

    int area(const rectangle *r);
    

    您可以通过相交的矩形和第一个矩形传递它,以获得两者的区域。

    现在,您只需将第一个矩形区域除以相交的矩形区域并打印结果。