python输入三角形三边_python实现输入三角形边长自动作图求面积案例

三角形是个好东西,比如知道三条边边长,可以判断能不能组成三角形(两边之和大于第三边),如果可以就进一步计算其面积(海伦公式),最后还能把这个三角形画出来(余弦定理求角度),所以说这个作为一个编程题目用于教学是比较棒的。

在jupyterlab中运行效果如下:

20200412115023.jpg

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博客。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值