-3

正如我的标题中提到的,我如何计算正方形、矩形和交叉的面积?用户将输入所有坐标。对于 square 和 rect ,该区域很容易但交叉,我该怎么做?如果用户交叉输入坐标,我如何获得这三个坐标的长度和宽度,以便我的面积计算准确?下面是一个十字架的插图,这很棘手。

    ****
    *  *
 ****  ****
 *        *
 ****  ****
    *  *
    ****

//this is for square and rectangle,but to take note,user will input from from bottom left to right, then top right to left, so the caculation below will than work
l = (((x1-x2)^2 + (y1-y2)^2))^(1/2);
w = (((x1-x4)^2 + (y1-y4)^2))^(1/2);
A=l*w;

以及如何获得形状上的坐标点和形状上的坐标点?

示例:正方形的坐标为 (1,1),(3,1),(1,3),(3,3)

所以正方形的坐标是(2,2)

正方形上的坐标是 (1,2),(2,1),(3,2),(2,3)

4

4 回答 4

3

十字是两个矩形的叠加,但你只需要计算一次重叠的面积。

总面积为:

面积:

 ****
 *  *
 *  *
 *  *
 *  *
 *  *
 ****

加上面积

 **********
 *        *
 **********

减去面积:

 ****
 *  *
 **** 

获取结果的绝对值以避免坐标顺序错误的问题 - 区域始终为正。

于 2012-11-05T11:41:01.197 回答
0
      a
     |--|
   c ****
  |--*  *
 -****  ****
b|*        *
 -****  ****
     *  *
     ****

 A = (a+b) * (2c+a) - a*b

所以,你真的只需要识别 4 个坐标。垂直条的左上角和右上角,以及水平条的左上角和左下角坐标。

左上垂直:y_tlv=y_max, x_tlv = {x_min where y=y_max}
右上垂直:y_trv=y_max, x_trv = {x_max where y=y_max}
左上水平:y_tlh={y_max where x=x_min}, x_tlh=x_min
左下水平:y_blh={y_min where x=x_min}, x_blh=x_min

a = abs(x_trv - x_tlv)
b = abs(y_tlh - y_blh)
c = abs(x_tlv - x_tlh)

我将留给您找出识别所需坐标点的算法。

于 2012-11-05T11:51:34.603 回答
0

给定一个像这样简单的十字形状:

    A---B
    |   |
 C--D   E--------F
 |    X  Y       |
 G--H   I--------J
    |   |
    K---L

如上所述,您可以找到三个四边形的面积并计算整个图形的面积... ABLK + CFJG - DEHI。这甚至适用于没有直角的倾斜十字架。

如何计算十字形的质心取决于您实际想要的 X 或 Y。要获得 Y,您必须首先找到十字形的边界四边形,然后找到该四边形的质心就很简单了。请记住,如果您允许像我在上面绘制的那样不等长的臂长,则 Y 点不需要包含在十字架本身内!

要找到质心 X,您需要计算 AB 和 KL 的中点,以及 CG 和 FJ 的中点。然后,您可以找到这两条线 AB-KL 和 CG-FJ 的交点,以找到交叉点 X,它位于十字架内部,只要十字架的形状是规则的。

如果您允许任意的十字形状(例如,十字中可能根本没有直角),我认为您不能保证 X 点也位于该形状内,但我懒得以一种或另一种方式证明这一点。

在形状的周长上找到任意点很容易;您只需要选择由边缘连接的任何一对角(例如,EF 或 KH)并在两者之间的向量上选择一个点

于 2012-11-05T13:42:53.223 回答
0

我假设用户至少需要输入以下 4 个坐标:

       C1 * * *
       *      *
       *      *
C2 * * *      * * * *
*                   *
*                   *
*  * * *      * * * C3
       *      *
       *      *
       * * * C4

现在,您可以计算 3 个矩形的坐标:

       *  * * *
       *  1   *
       *      *
*  * * * **** * * * *
*         2         *
*                   *
*  * * * **** * * * *
       *  3   *
       *      *
       * * *  *

最后是十字架的区域。

于 2012-11-05T12:34:11.663 回答