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中的Numpy入门教程
Apr 26 Python
python操作ie登陆土豆网的方法
May 09 Python
python 读取视频,处理后,实时计算帧数fps的方法
Jul 10 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
使用python判断你是青少年还是老年人
Nov 29 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
实例介绍Python中整型
Feb 11 Python
详解python做UI界面的方法
Feb 27 Python
python3.x 生成3维随机数组实例
Nov 28 Python
python中round函数如何使用
Jun 19 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
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
js的event详解。
2006/09/06 Javascript
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
node和vue实现商城用户地址模块
2018/12/05 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
Python break语句详解
2014/03/11 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
python入门教程之基本算术运算符
2020/11/13 Python
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
水电工岗位职责
2014/02/12 职场文书
文案策划求职信
2014/04/14 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
2016年感恩教师节活动总结
2016/04/01 职场文书
六年级作文之预言作文
2019/10/25 职场文书
一篇文章带你复习java知识点
2021/06/28 Java/Android
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers