注:对于四边形,需要先按顺时针或者逆时针排序,可以对凸四边形或者凹四边形进行计算。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time     : 2021/8/10 9:16
@Author   : Allen Pen(Haijun Peng)
@E-mail   : shengyutou@outlook.com
@FileName : get_quadrilateral_area.py
@Software : PyCharm
NOTE:
"""
import mathdef get_triangle_area(point_a, point_b, point_c):"""求三角形面积;一切都是基于三角形!!!!原文链接:https: // blog.csdn.net / hjq376247328 / article / details / 49465137:param point_a、point_b、point_c: 数据类型为list,二维坐标形式[x、y]或三维坐标形式[x、y、z]:return: 三角形面积,返回 - 1 为不能组成三角形;"""area = -1side = [0,0,0]  # 储存三条边的长度;a_x, b_x, c_x = point_a[0], point_b[0], point_c[0]a_y, b_y, c_y = point_a[1], point_b[1], point_c[1]if len(point_a) == len(point_b) == len(point_c) == 3:# print("坐标点为3维坐标形式")a_z, b_z, c_z = point_a[2], point_b[2], point_c[2]else:a_z, b_z, c_z = 0,0,0# print("坐标点为2维坐标形式,z 坐标默认值设为0")side_ab = math.sqrt(pow(a_x - b_x, 2) + pow(a_y - b_y, 2) + pow(a_z - b_z, 2))side_ac = math.sqrt(pow(a_x - c_x, 2) + pow(a_y - c_y, 2) + pow(a_z - c_z, 2))side_cb = math.sqrt(pow(c_x - b_x, 2) + pow(c_y - b_y, 2) + pow(c_z - b_z, 2))# 不能构成三角形;if side_ab + side_ac <= side_cb or side_ab + side_cb <= side_ac or side_ac + side_cb <= side_ab:return area# 利用海伦公式。s = sqr(p * (p - a)(p - b)(p - c));p = (side_ab + side_ac + side_cb) / 2  # 半周长area = math.sqrt(p * (p - side_ab) * (p - side_ac) * (p - side_cb))return areaa = [0,0,9]
b = [0,1,9]
c = [1,1,9]area = get_triangle_area(a,b,c)def get_quadrilateral_area(point_a, point_b, point_c, point_d):"""本算法可以计算凸四边形,也可以计算凹四边形本算法用于计算已经按顺时针或者逆时针排序过的点四边形可以分解为两个三角形:param point_a, point_b, point_c, point_d: 数据类型为list,二维坐标形式[x、y]或三维坐标形式[x、y、z]:return: 四边形面积"""# 对于凸四边形,以任一点分割成两个三角形均可# 1,以ac线分割area_11 = get_triangle_area(point_a, point_b, point_c)area_12 = get_triangle_area(point_a, point_d, point_c)area_1 = area_11 + area_12# 2,以bd线分割area_21 = get_triangle_area(point_b, point_a, point_d)area_22 = get_triangle_area(point_b, point_c, point_d)area_2 = area_21 + area_22# 对于凸四边形,以任一点分割成两个三角形均可;对于凹四边形,取分割面积小的一种算法为实际面积area = min(area_1,area_2)return area# for area test1
#   Area of shell faces (one side only): 512.50
# Coordinates of vertex 1 :0.,0.,0.
# Coordinates of vertex 2 :30.,0.,0.
# Coordinates of vertex 3 :40.,15.,0.
# Coordinates of vertex 0 :15.,20.,0.# a= [0.,0.,0]
# b= [30.,0.,0]
# c= [40.,15.,0]
# d= [15.,20.,0]
#
# aa = get_quadrilateral_area(a,b,c,d)
# Out[25]: 512.5# for area test2
#   Area  350.00
# Coordinates of vertex 2 :-20.,0.,0.
# Coordinates of vertex 3 :0.,10.,0.
# Coordinates of vertex 0 :15.,0.,0.
# Coordinates of vertex 1 :0.,30.,0.# a= [-20.,0.,0.]
# b= [0.,10.,0.]
# c= [15.,0.,0.]
# d= [0.,30.,0.]
#
# get_quadrilateral_area(a,b,c,d)
# Out[23]: 349.9999999999997

最后的最后

欢迎大家点赞、评论及转载,转载请注明出处!

如果觉得我帮助到了你:
  为我打call,不如为我打款!

求三角形 四边形面积(python)相关推荐

  1. C语言求任意四边形面积和其关联的三角形面积的关系

    定理:对于任意的四边形ABCD,其对角线AC与BD的中点分别是M,N,AB,CD的延长线交于R.验证三角形RMN的面积是四边形ABCD面积的四分之一. 下面我们就用C语言来验证一下这个定理的正确性,由 ...

  2. python 三角形的三个边长a,b,c ,求三角形的面积?

    已知:三角形的三个边长a,b,c ,求三角形的面积? 海伦公式: s=(a+b+c)/2 import cmath a = 3 b = 4 c = 5p = 0.5*(a+b+c) m = p*(p- ...

  3. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  4. C语言成绩abc,C语言常用经典代码:求三角形的面积、把百分制成绩转换为ABC等级制、其两个自然数的最大公约数和最小公倍数...

    C语言 经典常用代码 C语言常用经典代码 求三角形的面积. 把百分制成绩转换为ABC等级制. 其两个自然数的最大公约数和最小公倍数. 求输入n个数的平均值. 求一个数各个位上的数字之和. 求n个数的阶 ...

  5. 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)

    牛客寒假算法集训营2 https://ac.nowcoder.com/acm/contest/327/A A.处女座的签到题 题目描述 平面上有n个点,问:平面上所有三角形面积第k大的三角形的面积是多 ...

  6. 任意给4条边求形成四边形面积最大值

    题目:任意给4条边,求形成四边形面积最大值. 结论:形成的四边形的四个顶点都在它的外接圆上,面积S满足: 其中 这也即是圆内接四边形的面积公式. 证明过程: 首先我们把四边形的四个顶点和四条边顺次分别 ...

  7. 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...

    已知三角形三边分别为4,5,6,求三角形的面积.用c语言编写程序 关注:114  答案:6  mip版 解决时间 2021-01-18 16:33 提问者谁把流年搁浅 2021-01-17 23:52 ...

  8. java继承求三角形圆形面积_java求三角形面积

    (min>c)min=c; if(min>d)min=d; System.out.println("min is "+min); } } } 15.test30003求 ...

  9. bzoj1069: [SCOI2007]最大土地面积 凸包+旋转卡壳求最大四边形面积

    在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成的多边形面积最大. 题解:先求出凸包,O(n)枚举旋转卡壳,O(n)枚举另一个点,求最大四边形面积 /* ...

最新文章

  1. 在asp.net中为Web用户控件添加属性和事件
  2. Bash中的逻辑运算
  3. 趣谈网络协议笔记-二(第五讲)
  4. 常用系统存储过程有:
  5. C# DataGrid 控件在winform里显示行号
  6. Transformer也能生成图像,新型ViTGAN性能比肩基于CNN的GAN
  7. 利用Chrome开发者工具memory comparison分析一个时间段内的JavaScript代码内存占用率
  8. firstchild.data与childNodes[0].nodeValue意思
  9. EF调用执行Oracle中序列
  10. 一篇很好的面试文章 程序员面试IT公司的33个小贴士
  11. Live Mesh - Synchronizing life
  12. 关于pthread_cond_wait()使用的理解
  13. 【Java】编程思想汇总ing
  14. osip 修改适用于28181和35114
  15. 小文件治理之hive文件合并:hive小文件合并的三种方法
  16. JPEG图像格式解析
  17. 人的一生,到底在追求什么呢?
  18. android常用api大全,Android开发个人总结常用的api
  19. ArcGIS流域提取教程
  20. 雷林鹏分享:Lua while 循环

热门文章

  1. 是你想要的,在游戏中学编程
  2. 二手书交易系统用例图2.0
  3. [历朝通俗演义-蔡东藩]
  4. 那些年一起相思过的陈志勇
  5. 电脑总是重装系统对硬件到底有没有损害?看完这篇你就会有答案!
  6. 3D角色硬表面建模技巧与思路分享【上】
  7. 基于用户兴趣偏好的画像方法_基于客户偏好和产品评论的推荐系统
  8. Unsupervised Learning of Probably Symmetric Deformable 3D Objects from Images in the Wild
  9. 国内哪里培训python比较好-上海口碑好的Python培训机构是哪家
  10. [LintCode/LeetCode] Rotate List