共计 1910 个字符,预计需要花费 5 分钟才能阅读完成。
2019-09-03 13:16:24,“求凹多边形的面积”,这是一个面试题,我被问到了。所以就想将这个问题消灭成沫沫以明志。
一,三角形的面积公式
1. 平行四边形的面积 s = 底 * 高
2. 三角形可以视之为平行四边形的一半。因此:
三角形的面积 = 底 * 高 /2
二,不知高底,知其点位,求三角形的面积
1. 案例:已知三角形 ABC,ABC 的三点为 A(0,0),B(cx,cy),C(bx,by),求三角形面积
解:
① 获取三角形的矩形边界:
上边界 =cy
右边界 =bx
下边界 =0
左边界 =0
② 绘制边界,得到 D 点和三个三角形 t1,t2,t3
③ 由上图可知:
● 矩形面积
=bx*cy
● t1 面积
=(cx*cy)/2
● t2 面积
=(bx-cx)*(cy-by)/2
=(bxcy – bxby – cxcy + cxby)/2
● t3 面积
= bx*by/2
● 三角形 ABC 的面积
= 矩形面积 – t1 面积 – t2 面积 – t3 面积
= bxcy – (cxcy)/2 – (bxcy – bxby – cxcy + cxby)/2 – (bx*by)/2
= (2bxcy – cxcy – (bxcy – bxby – cxcy + cxby) – bxby)/2
= (2bxcy – cxcy – bxcy + bxby + cxcy – cxby – bxby)/2
= (2bxcy – bxcy – cxby)/2
= (bxcy – cxby)/2
2. 三角形还有一种画法,如图
做辅助线:
● 大三角形 ABD 的面积
=cx*cy/2
● t1 面积
=(cx-bx)*(cy-by)/2
=(cxcy-cxby-bxcy+bxby)/2
=(cxcy-cxby-bxcy+bxby)/2
● t2 面积
=(cx-bx)*by
=cxby-bxby
● t3 面积
= bx*by/2
● 三角形 ABC 的面积
= 大三角形 ABD 的面积 – t1 面积 – t2 面积 – t3 面积
= (cxcy – (cxcy-cxby-bxcy+bxby) – (2cxby-2bxby) – bx*by)/2
= (cxcy – cxcy+cxby+bxcy-bxby – 2cxby+2bxby – bx*by)/2
= (bxcy-cxby)/2
对比一下上一种三角形的面积公式:(bxcy – cxby)/2,两个公式是一样的,所以这个就是求一顶点在圆心的三角形面积的公式了。
3. 再来一画法,跟三角形耗上了
● 矩形面积
=bx*(cy-by)
=bxcy-bxby
● t1 面积
=(cx*cy)/2
● t2 面积
=(bx-cx)*(cy-by)/2
=(bxcy – bxby – cxcy + cxby)/2
● t3 面积
= -bx*by/2
● 三角形 ABC 的面积
= 矩形面积 – t1 面积 – t2 面积 – t3 面积
= bxcy-bxby – (cxcy)/2 – (bxcy – bxby – cxcy + cxby)/2 – (-bxby/2)
= (2bxcy-2bxby – cxcy – bxcy + bxby + cxcy – cxby + bxby)/2
= (bxcy – cxby)/2
还是一样的公式 (bxcy – cxby)/2,所以这就是三角形面积的计算公式
三,进入多边形
1. 多边形里,有一种游戏规则,叫做连点成面,如图:
● 这叫扇形面,在 WebGl 里叫 TRIANGLE_FAN,从 A 到 G 逆时针绘制,所有面都有一个共同的顶点 A。
● 在平面中计算,扇形面的面积 = (bxcy – cxby)/2 + (cxdy – dxcy)/2 + … + (fxgy – gxfy)/2
2. 多边形里还有一种另类的叫:异形。
如图:
● 连一下线:
有种想哭的节奏(┬_┬)
3. 先观察一下异形的规律
- 异性都存在存在逆折点。
- 逆折的判断条件:默认逆时针连点,若基点到下一个点(如 C)的角度小于基点到上一个点(如 B)的角度,即存在顺时针连点,那么此图形就存在逆折。
- 逆折点:发生逆折的点,如点 B,点 D
四,复杂的异形简化
1. 理解 ABC 的面积的计算原理是关键。
(bxcy – cxby)/2 公式是基于逆时针定义的
2. 我们在连点绘制多边形时,会有如下规则:
- 按照顶点在集合中的顺序,依次连接,而不会考虑连接的方向。
- 在计算面积时,依旧会按照点的顺序计算。
3. 我们在按照一种方向的时针公式计算以不同方向绘制的三角形时,便会出现面积为负数的三角形。如:
三角形 ABC 的真正面积是:(cxby – bxcy)/2,即 -(bxcy – cxby)/2,因此我们依旧以(bxcy – cxby)/2 计算得到的面积就是负数
4. 计算异形 ABCD 的面积
ABCD 的面积
=ABC 面积 + ACD 面积
=(bxcy – cxby)/2 + (cxdy – dxcy)/2
因为 ABC 面积 为负数,异形 ABCD 的面积正好是:大三角形 ACD 面积 – ABC 的真正面积
5. 总结
在异形面积的计算中,正常扇形的计算公式依旧是适用,即:
多边形面积 = (bxcy – cxby)/2 + (cxdy – dxcy)/2 + … + (fxgy – gxfy)/2