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 相关文章推荐
Python3中的2to3转换工具使用示例
Jun 12 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
100行python代码实现跳一跳辅助程序
Jan 15 Python
Python Logging 日志记录入门学习
Jun 02 Python
flask中的wtforms使用方法
Jul 21 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
Python实战之制作天气查询软件
May 14 Python
Python3 pywin32模块安装的详细步骤
May 26 Python
Python selenium模块实现定位过程解析
Jul 09 Python
Python实现扫码工具的示例代码
Oct 09 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JS获取url参数、主域名的方法实例分析
2016/08/03 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
微信小程序实现下载进度条的方法
2017/12/08 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python中str.format()详解
2017/03/12 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
python getpass实现密文实例详解
2019/09/24 Python
python列表推导式入门学习解析
2019/12/02 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
python装饰器代码深入讲解
2021/03/01 Python
中海讯通笔试题
2015/09/15 面试题
工地门卫岗位职责
2013/12/30 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
调研汇报材料范文
2014/08/17 职场文书
大学生学年个人总结
2015/02/15 职场文书
教师党员自我评价2015
2015/03/04 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python