Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何计算正方形、矩形和十字的面积。用户将输入坐标_C++_Math - Fatal编程技术网

C++ C++;如何计算正方形、矩形和十字的面积。用户将输入坐标

C++ C++;如何计算正方形、矩形和十字的面积。用户将输入坐标,c++,math,C++,Math,正如我在标题中提到的,我如何计算正方形、长方形和十字形的面积? 用户将输入所有坐标。对于正方形和矩形,面积很容易,但是交叉,我该怎么做?如果用户十字交叉输入坐标,如何获得这三个坐标的长度和宽度,从而使我的面积计算准确?? 下面是一个十字架的插图,这很棘手 **** * * **** **** * * **** **** * * **** //this is for square and rectangle,but to take no

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

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

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

交叉点是两个矩形的叠加,但只需对重叠区域进行一次计数

总面积为:

以下领域:

 ****
 *  *
 *  *
 *  *
 *  *
 *  *
 ****
 ****
 *  *
 **** 
加上

 **********
 *        *
 **********
减去以下面积:

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

      a
     |--|
   c ****
  |--*  *
 -****  ****
b|*        *
 -****  ****
     *  *
     ****

 A = (a+b) * (2c+a) - a*b
所以,你只需要识别4个坐标。垂直条的左上角和右上角,以及水平条的左上角和左下角坐标

左上角垂直:
y_tlv=y_max,x_tlv={x_min,其中y=y_max}

右上角垂直:
y_trv=y_max,x_trv={x_max,其中y=y_max}

左上水平:
y_tlh={y_max其中x=x_min},x_tlh=x_min

左下水平:
y_blh={y_min其中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)

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

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

       C1 * * *
       *      *
       *      *
C2 * * *      * * * *
*                   *
*                   *
*  * * *      * * * C3
       *      *
       *      *
       * * * C4
现在,您可以从中计算3个矩形的坐标:

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

最后是十字架的面积。

给出一个简单的十字形状,如下所示:

    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)链接的任意一对角点,并在两个

交叉点之间的向量上拾取一个点,这两个交叉点由5个矩形组成,因此计算应该很容易。交叉点的面积可以按如下方式计算:面积(水平条)+面积(垂直条)-面积(水平条和垂直条之间的交点)。因此,您只需要4个坐标。交点的面积是(垂直条的宽度*水平条的高度)。所谓“正方形坐标”和“正方形坐标”是指“正方形的中心”和“正方形边上的一点”?@Rook是,“正方形坐标”是正方形的中心,“正方形上的坐标”是组成正方形的直线上的点,不包括用户输入坐标(仅从4个坐标计算出的十字形状),或者用户输入每个角点的坐标(其中有8个),或者其他什么?