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之再深点,更懂list
Sep 20 Python
Python中的类与对象之描述符详解
Mar 27 Python
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 Python
Ubuntu下安装PyV8
Mar 13 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
python3设计模式之简单工厂模式
Oct 17 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
解决echarts中饼图标签重叠的问题
May 16 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
pycharm全局搜索的具体步骤
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 Sql Server连接失败问题及解决办法
2009/08/07 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
js点击选择文本的方法
2015/02/09 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
react-router实现按需加载
2017/05/09 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
2019/01/23 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
vue实现评论列表功能
2019/10/25 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python实现提取百度搜索结果的方法
2015/05/19 Python
Python闭包思想与用法浅析
2018/12/27 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
基于python实现学生信息管理系统
2019/11/22 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
python微信公众号开发简单流程实现
2020/03/09 Python
python实现批量命名照片
2020/06/18 Python
群众路线教育实践活动方案
2014/02/02 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
4s店销售经理岗位职责
2014/07/19 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Python first-order-model实现让照片动起来
2022/06/25 Python