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添加模块搜索路径方法
Sep 11 Python
PyQt5实现拖放功能
Apr 25 Python
python os用法总结
Jun 08 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
详解python 注释、变量、类型
Aug 10 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
解决python有时候import不了当前的包问题
Aug 28 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
解决使用Pandas 读取超过65536行的Excel文件问题
Nov 10 Python
Ubuntu16安装Python3.9的实现步骤
Dec 15 Python
python sleep和wait对比总结
Feb 03 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&amp;&amp;mysql)六
2006/10/09 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
JS获取并操作iframe中元素的方法
2013/03/21 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
canvas绘图不清晰的解决方案
2017/02/28 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
浅谈Python 的枚举 Enum
2017/06/12 Python
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
初中班主任评语大全
2014/04/24 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
五年级上册复习计划
2015/01/19 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
党员反四风学习心得体会
2016/01/22 职场文书
python游戏开发之pygame实现接球小游戏
2022/04/22 Python
Go语言入门exec的基本使用
2022/05/20 Golang