如我的标题所述,我如何计算方形,矩形和交叉的面积? 用户将输入所有坐标。对于方形和矩形,该区域很容易但是交叉,我该怎么做?如果用户纵横交错输入坐标,我如何得到所有三个的长度和宽度,以便我的面积计算准确? 下面是十字架的插图,非常棘手......
****
* *
**** ****
* *
**** ****
* *
****
//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)
答案 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)并在两者之间的矢量上选择一个点