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 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
python创建临时文件夹的方法
Jul 06 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
Python外星人入侵游戏编程完整版
Mar 30 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
python-numpy-指数分布实例详解
Dec 07 Python
Python统计学一数据的概括性度量详解
Mar 03 Python
django rest framework 过滤时间操作
Jul 12 Python
python爬虫要用到的库总结
Jul 28 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中数据的批量导入(csv文件)
2006/10/09 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
JavaScript实现快速排序(自已编写)
2012/12/19 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
微信小程序开发之大转盘 仿天猫超市抽奖实例
2016/12/08 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
Vue的elementUI实现自定义主题方法
2018/02/23 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
JS中的变量作用域(console版)
2020/07/18 Javascript
Python获取网页上图片下载地址的方法
2015/03/11 Python
解读python logging模块的使用方法
2018/04/17 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
python随机模块random使用方法详解
2020/02/14 Python
Python requests模块cookie实例解析
2020/04/14 Python
在python中求分布函数相关的包实例
2020/04/15 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
医学类导师推荐信范文
2013/11/19 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
体育比赛口号
2014/06/09 职场文书
国庆节活动总结
2014/08/26 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
软件测试专业推荐信
2014/09/18 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
创业计划书之美甲店
2019/09/20 职场文书