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使用metaclass实现Singleton模式的方法
May 05 Python
python使用htmllib分析网页内容的方法
May 08 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
Python3一行代码实现图片文字识别的示例
Jan 15 Python
Python 数据处理库 pandas进阶教程
Apr 21 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
php根据身份证号码计算年龄的实例代码
2014/01/18 PHP
php开启openssl的方法
2014/05/15 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
使用Python神器对付12306变态验证码
2016/01/05 Python
Python subprocess库的使用详解
2018/10/26 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
Python类及获取对象属性方法解析
2020/06/15 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
迅雷Cued工作心得体会
2014/01/27 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
店长岗位职责
2015/02/11 职场文书