【问题标题】:Intersection Area in C [closed]C中的交叉区域[关闭]
【发布时间】:2017-04-19 04:33:42
【问题描述】:

假设我有 5 个矩形,每个矩形有 4 个参数, 这些是 x,y,宽度,高度。 x 和 y -> 开始协调,w 和 h -> 边。我们如何计算相交面积?

 int rectangle[5][4];

    int calculate_intersection(){
    ....
    return total;
    }

【问题讨论】:

  • 为什么不使用具有表达性字段名称的struct 而不是四个值的数组来表示一个矩形?
  • 我不知道struct,我是新学生,我们没有做这节课
  • 这更像是一道数学题,而不是编程题。
  • @SefaTaşcan 阅读stackoverflow规则,这里不做赋值,求助编程问题。
  • 拿一支笔和几张纸,想想如何画出 2 个矩形。然后在矩形上“折叠”该操作,阅读:将其应用于两个矩形,然后是一个矩形和结果等。

标签: c arrays


【解决方案1】:

您将希望迭代地制作新的矩形,每个矩形都是前一个的交集。假设您有四个矩形,称它们为Ri,其中i1, 2, 3,4。让我们将相交矩形称为I4,用于 4 个矩形的相交。

首先我们要相交R1R2。将生成的 widthheightxy 保存到 I4

接下来我们要相交R3I4。将生成的 widthheightxy 保存到 I4

然后我们将要相交R4I4。将生成的 widthheightxy 保存到 I4

此时I4 是所有4 个矩形R1, R2, R3,R4 相交的结果。我相信您现在会知道如何根据这些值计算面积。

: : 寻找交点的提示和伪代码 : :

鉴于矩形可能处于任何相对于彼此的方向和位置,我们需要做一些工作来确定点相对于彼此的位置。通常,我们将使用 MAXMIN 函数,或者您可以使用这些单行代码:

int max = (a>b) ? a : b;
int min = (a<b) ? a : b;

max 将保存ab 的值,以较大者为准,'min' 将保存较小的值。现在有了这个,我们可以解决我们的问题。

要找到I4 x-值,我们需要在 x 方向上取 RiRj 矩形的最大值:I4x = max{Ri_x, Rj_x}

要找到 I4 y-值,我们需要在 y 方向上取 RiRj 矩形的最大值:I4y = max{Ri_y, Rj_y}

要找到I4 width-值,我们需要取RiRj 矩形宽度的最小值,但是我们需要减去最终移位的x 位置:I4w = min{Ri_x + Ri_w, Rj_x + Rj_w} - I4_x

要找到I4height-值,同样我们需要取RiRj 矩形高度的最小值并减去最终移位的@987654376 @位置:I4w = min{Ri_y + Ri_h, Rj_y + Rj_h} - I4_y

【讨论】:

  • 如何相交?这是主要问题
  • @SefaTaşcan:绘制了两个相交矩形的ASCII图;根据两个矩形的 x、y、width、height 值计算出交点的描述。你就是这样做的。如果你还没有学过结构,那么在你学完结构之后再做一次这个练习(下周,还是下周?)。您可能会发现“左下角,右上角”比宽度和高度更容易操作,尽管这两种形式是可以互换的。这假设矩形与轴对齐;如果它们处于任意角度,则需要更多信息。
  • @SefaTaşcan,提示/伪帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2014-02-18
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
相关资源
最近更新 更多