C ++如何计算square,rect和cross的面积。用户将输入坐标

时间:2012-11-05 11:35:00

标签: c++ math

如我的标题所述,我如何计算方形,矩形和交叉的面积? 用户将输入所有坐标。对于方形和矩形,该区域很容易但是交叉,我该怎么做?如果用户纵横交错输入坐标,我如何得到所有三个的长度和宽度,以便我的面积计算准确? 下面是十字架的插图,非常棘手......

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

//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;

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

示例:square的坐标为(1,1),(3,1),(1,3),(3,3)

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

和方坐标是(1,2),(2,1),(3,2),(2,3)

4 个答案:

答案 0 :(得分:3)

十字架是两个矩形的叠加,但你必须只计算一次重叠区域。

总面积为:

区域:

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

加上

的区域
 **********
 *        *
 **********

减去以下区域:

 ****
 *  *
 **** 

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

答案 1 :(得分: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)

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

答案 2 :(得分:0)

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

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

现在可以从中计算出3个矩形的坐标:

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

最终是十字架的区域。

答案 3 :(得分: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)并在两者之间的矢量上选择一个点