python实现输入三角形边长自动作图求面积案例


Posted in Python onApril 12, 2020

三角形是个好东西,比如知道三条边边长,可以判断能不能组成三角形(两边之和大于第三边),如果可以就进一步计算其面积(海伦公式),最后还能把这个三角形画出来(余弦定理求角度),所以说这个作为一个编程题目用于教学是比较棒的。

在jupyterlab中运行效果如下:

python实现输入三角形边长自动作图求面积案例

python源代码如下:

# %matplotlib inline
# 建议在jupyterlab中运行
 
import math
import numpy as np
import matplotlib.pyplot as plt
 
def judge(lines):
 """判断是否能组成三角形"""
 flag = 0
 for i in range(3):
  l1 = lines.copy() # 要copy,不然会对源进行修改
  r = l1.pop(i) # r被取出,l1剩余俩
  if (r>=sum(l1)):
   print("输入的边长无法构成三角形")
   break
  else:
   flag += 1
   continue
 if flag==3:
  return True
 else:
  return False
 
def plot_triangle():
 lines = input("输入三条边长并用空格隔开:")
 params = lines.split(" ")
 lines = list(map(lambda x:float(x),params))
 if judge(lines):
  p = sum(lines)/2
  a,b,c = lines
  area = math.sqrt(p*(p-a)*(p-b)*(p-c))
  width = max(lines)
  height = area/width*2
  # 计算角度
  lines = [a,b,c]
  idx_A = np.argmax(lines)
  A = lines.pop(idx_A)
  # 最长边作为底部边长,最左侧与坐标轴原点对齐
  B,C = lines
  # 根据三边长求两个水平夹角角度
  cos_C = (A**2+B**2-C**2)/(2*A*B)
  cos_B = (A**2+C**2-B**2)/(2*A*C)
  # 根据余弦值求得正切值
  k_C = math.tan(math.acos(cos_C))
  k_B = math.tan(math.acos(cos_B))
  # 根据正切值和高,获得边长
  w_C = height/k_C
  w_B = height/k_B
  # 确定三个顶点的坐标
  loc_A = (0,height)
  loc_B = (-w_B,0)
  loc_C = (w_C,0)
  plt.figure(figsize=(4,3))
  plt.plot([0,-w_B,w_C,0],[height,0,0,height],"gray")
  plt.plot([0,0],[0,height],"r--")
  plt.text(1,height/2,"h=%.1f"%(height),color="blue",fontsize=12)
  ax = plt.gca()
  ax.set_aspect(1) # 保证两条坐标轴scale一致
  plt.axis('off') # 关闭显示直角坐标系
  plt.savefig("./trianle.png",dpi=300)
  print("三角形面积为:%.4f"%(area))
 
if __name__=="__main__":
 plot_triangle()

补充知识:Python 三角形类,实现数据的输入、输出、周长、面积的计算

我就废话不多说了,还是直接看代码吧!

import math
class Triangle:
  def __init__(self):
    a=0
    b=0
    c=0
  def add(self):
      self.a=int(input("输入第1条边的长度:"))
      self.b=int(input("输入第2条边的长度:"))
      self.c=int(input("输入第3条边的长度:"))
      while (self.a+self.b<=self.c):
        print("不符合三角边的规定,重新输入!")
        self.a=int(input("输入第1条边的长度:"))
        self.b=int(input("输入第2条边的长度:"))
        self.c=int(input("输入第3条边的长度:"))
  def out(self):
    print (self.a,self.b,self.c)
  def length(self):
    print (self.a+self.b+self.c)
  def area(self):
    print ((((a+b+c)/2)-a)*(((a+b+c)/2)-b)*(((a+b+c)/2)-c)*((a+b+c)/2))
 
 
t=Triangle()
t.add()
t.out()
t.length()
t.area()

以上这篇python实现输入三角形边长自动作图求面积案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python控制台中实现进度条功能
Nov 10 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
python 文件操作删除某行的实例
Sep 04 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
Python List列表对象内置方法实例详解
Oct 22 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
Python使用Pygame绘制时钟
Nov 29 Python
Python3如何判断三角形的类型
Apr 12 #Python
Python判断三段线能否构成三角形的代码
Apr 12 #Python
Python 实现打印单词的菱形字符图案
Apr 12 #Python
python 使用while循环输出*组成的菱形实例
Apr 12 #Python
Python利用for循环打印星号三角形的案例
Apr 12 #Python
Python3实现打印任意宽度的菱形代码
Apr 12 #Python
pandas使用之宽表变窄表的实现
Apr 12 #Python
You might like
解析php取整的几种方式
2013/06/25 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
javascript常用方法总结
2015/05/14 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
使用python实现kNN分类算法
2019/10/16 Python
Django密码存储策略分析
2020/01/09 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
django中ImageField的使用详解
2020/12/21 Python
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
YSL圣罗兰美妆官方旗舰店:购买YSL口红
2018/04/16 全球购物
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
中软国际Java程序员笔试题
2014/07/19 面试题
大学生物业管理求职信
2013/10/24 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
合作协议书模板2014
2014/09/26 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
常用的文件对应的MIME类型汇总
2022/04/26 HTML / CSS