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实现可以断点续传和并发的ftp程序
Sep 13 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
python实现图书管理系统
Mar 12 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
May 16 Python
使用EduBlock轻松学习Python编程
Oct 08 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
使用Python检测文章抄袭及去重算法原理解析
Jun 14 Python
python调用动态链接库的基本过程详解
Jun 19 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
python 密码学示例——理解哈希(Hash)算法
Sep 21 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
numpy实现RNN原理实现
Mar 02 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
JavaScript中常用的运算符小结
2012/01/18 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
Python3转换html到pdf的不同解决方案
2019/03/11 Python
python Pandas库基础分析之时间序列的处理详解
2019/07/13 Python
Django ORM 聚合查询和分组查询实现详解
2019/08/09 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
会计主管岗位职责
2014/01/03 职场文书
幼儿教师求职信
2014/05/24 职场文书
明星员工获奖感言
2014/08/14 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
毕业实习感受与体会
2015/05/26 职场文书
夏洛特的网观后感
2015/06/15 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
tree shaking对打包体积优化及作用
2022/07/07 Java/Android