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  __getattr__与__setattr__使用方法
Sep 06 Python
跟老齐学Python之编写类之二方法
Oct 11 Python
python链接Oracle数据库的方法
Jun 28 Python
Python读取Excel的方法实例分析
Jul 11 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
Python中Iterator迭代器的使用杂谈
Jun 20 Python
定制FileField中的上传文件名称实例
Aug 23 Python
python实现静态服务器
Sep 05 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
python实现简单的购物程序代码实例
Mar 03 Python
用python读取xlsx文件
Dec 17 Python
python实现学员管理系统(面向对象版)
Jun 05 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
如何在一个页面显示多个百度地图
2013/04/07 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
解决VUEX的mapState/...mapState等取值问题
2020/07/24 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
python中id函数运行方式
2020/07/03 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
中专生求职自荐信范文
2013/12/22 职场文书
大学校庆策划书
2014/01/31 职场文书
大学军训感言300字
2014/03/09 职场文书
中国好声音广告词
2014/03/18 职场文书
公民授权委托书
2014/10/15 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
Python数据分析之绘图和可视化详解
2021/06/02 Python
Python-OpenCV实现图像缺陷检测的实例
2021/06/11 Python