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系列之从文件读取和保存数据
May 23 Python
Python中的异常处理简明介绍
Apr 13 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
Python2.x与Python3.x的区别
Jan 14 Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
Python编程flask使用页面模版的方法
Dec 28 Python
python TF-IDF算法实现文本关键词提取
May 29 Python
python实现图片上添加图片
Nov 26 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Python pathlib模块使用方法及实例解析
Oct 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生成N个不重复的随机数实例
2013/11/12 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
发现的以前不知道的函数
2006/09/19 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
Linux环境下MySQL-python安装过程分享
2015/02/02 Python
python的unittest测试类代码实例
2017/12/07 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
用Python逐行分析文件方法
2019/01/28 Python
python搜索包的路径的实现方法
2019/07/19 Python
python实现扫雷游戏的示例
2020/10/20 Python
Python中常用的os操作汇总
2020/11/05 Python
Python实现微信表情包炸群功能
2021/01/28 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
html5 touch事件实现页面上下滑动效果【附代码】
2016/03/10 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
旅游管理专业学生求职信
2013/09/28 职场文书
承诺书格式
2014/06/03 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
新闻稿怎么写
2015/07/18 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
Python编解码问题及文本文件处理方法详解
2021/06/20 Python