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字符串匹配算法KMP实例
Jul 18 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
python实现K最近邻算法
Jan 29 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
python tkinter基本属性详解
Sep 16 Python
简单了解Python write writelines区别
Feb 27 Python
python中怎么表示空值
Jun 19 Python
浅析Python 条件控制语句
Jul 15 Python
python创建文本文件的简单方法
Aug 30 Python
Python实现Word文档转换Markdown的示例
Dec 22 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
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
python 队列详解及实例代码
2016/10/18 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
Python简单实现查找一个字符串中最长不重复子串的方法
2018/03/26 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python爬取淘宝商品销量信息
2018/11/16 Python
python仿抖音表白神器
2019/04/08 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
python找出因数与质因数的方法
2019/07/25 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
干部行政关系介绍信
2014/01/17 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
2015年市场部工作总结
2015/04/30 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
详细介绍python类及类的用法
2021/05/31 Python
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python