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之使用Python操作数据库(1)
Nov 25 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
Scrapy的简单使用教程
Oct 24 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
Java多线程实现四种方式原理详解
Jun 02 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
Python基础详解之邮件处理
Apr 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
2017/06/29 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
python自动格式化json文件的方法
2015/03/11 Python
python实现合并两个数组的方法
2015/05/16 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
python 正确保留多位小数的实例
2018/07/16 Python
用Python实现最速下降法求极值的方法
2019/07/10 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
九年级英语教学反思
2014/01/31 职场文书
婚前协议书范本
2014/10/27 职场文书
先进个人自荐书
2015/03/06 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
教导处教学工作总结
2015/08/12 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Python实现视频中添加音频工具详解
2021/12/06 Python