Python Matplotlib从输入中绘制具有给定边的三角形

Python Matplotlib从输入中绘制具有给定边的三角形,python,matplotlib,Python,Matplotlib,我试图使用Matoplotlib在python中绘制一个三角形,边的大小由输入给定。下面您将看到我的代码,我如何获取变量并在Matplotlib中使用它们绘制三角形 import numpy as np import turtle from turtle import * import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt import matplotlib.patches as patches

我试图使用Matoplotlib在python中绘制一个三角形,边的大小由输入给定。下面您将看到我的代码,我如何获取变量并在Matplotlib中使用它们绘制三角形

import numpy as np
import turtle
from turtle import *
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import matplotlib.patches as patches



def triangle_angle(t, v, w):
    """Diese Funktion ergibt den Eck zwischen v und w"""

    cosT=np.divide((v**2+w**2-t**2),2*v*w)
    alfaT=np.arccos(cosT)
    alfaT=np.degrees(alfaT)
    return alfaT

def triangle(a,b,c):

    l=[]
    if (a+b>c) and (a+c>b) and (b+c>a) : #
        l.append(True)   
        l.append(np.sum([a,b,c]))
        p = float(np.divide(l[1], 2))       #Berechnet die haelfte des Umfangs
        l.append(np.sqrt(np.prod([p, (p - a), (p - b), (p - c)])))    #Berechnet die Flaeche mittles Heron Formula
    else:
        l.append(False)                     #Gibt dem ersten Element den Wert False
        l.append("Diese Zahlen koennen kein Dreieck konstruieren, Das Umfang koennte nicht berechnet sein")
        l.append("Die Flaeche koennte nicht berechnet sein") # Die Flaeche und Umfang koennte nicht berechnet werden
    return(l)

print("Dieses Programm prueft ob es mit 3 gegebene Laengen ein Dreickes gibt, berechnet \
 die Flaeche und das Umfang des Dreiecks und es zeichnet")

x=float(raw_input("geben Sie die erste Zahl ein  "))
y= float(raw_input("geben Sie die erste Zahl ein  "))
z= float(raw_input("geben Sie die erste Zahl ein  "))
if (x<=0) or (y<=0) or (z<=0):
    print("Eine oder mehrere Zahlen sind nicht positiv, bitte geben Sie die !Positive! Zahlen noch einmal. ")
    x=float(raw_input("geben Sie die erste Zahl ein  "))
    y= float(raw_input("geben Sie die erste Zahl ein  "))
    z= float(raw_input("geben Sie die erste Zahl ein  "))
    if triangle(x,y,z)[0] == True:
        print("So ein Dreiecks gibt es. Das Umfang ist "+str(triangle(x,y,z)[1])+" und die Flaeche ist "+str(triangle(x,y,z)[2]))
    else:
        print("So ein Dreiecks gibt es nicht")
else:
    if triangle(x,y,z)[0] == True:
        print("So ein Dreiecks gibt es. Das Umfang ist "+str(triangle(x,y,z)[1])+" und die Flaeche ist "+str(triangle(x,y,z)[2]))
    else:
        print("So ein Dreiecks gibt es nicht")



fig1 = plt.figure()
ax1 = fig1.add_subplot(111, aspect='equal')
ax1.add_patch(patches.RegularPolygon((0.5, 0.5),3,0.2,))
plt.show()
将numpy导入为np
进口海龟
从海龟进口*
导入matplotlib
matplotlib.use('TkAgg')
将matplotlib.pyplot作为plt导入
将matplotlib.patches导入为修补程序
def三角角(t、v、w):
“我是一个很好的朋友”
成本=np.除((v**2+w**2-t**2),2*v*w)
阿尔法特=np.arccos(成本)
阿尔法特=np度(阿尔法特)
返回阿尔法特
def三角板(a、b、c):
l=[]
如果(a+b>c)和(a+c>b)以及(b+c>a):#
l.append(True)
l.append(np.sum([a,b,c]))
p=浮点数(np.除法(l[1],2))#
附加(np.sqrt(np.prod([p,(p-a)、(p-b)、(p-c)]))#Berechnet die Flaeche mittles Heron公式
其他:
l.append(False)#表示不正确的元素
l.append(“本书的作者是Dreieck konstruieren,其作者是一位年轻人”)
l.附加(“我不知道该怎么办”)#我不知道该怎么办
返回(l)
印刷品(“印刷品计划”包括3个印刷品项目\
在德雷克和泽伊克内特的土地上
x=浮动(原始输入(“geben Sie die erste Zahl ein”))
y=浮动(原始输入(“geben Sie die erste Zahl ein”))
z=浮动(原始输入(“geben Sie die erste Zahl ein”))

如果(x可以使用
RegularPolygon
在matplotlib中绘制等边三角形。但是,如果三角形的边可能不同,则这不是一个选项

因此,需要将三角形绘制为一般的
多边形
。因此需要边点的坐标

为简单起见,我们可以选择沿x轴定位最长边(
c
),这将三角形的前两点确定为
(0,0)
(c,0)
。剩下的是计算三角形峰值的坐标

import numpy as np
import matplotlib.pyplot as plt

def calc_angles(a,b,c):
    alpha = np.arccos(  (b**2 + c**2 - a**2) /(2.*b*c) )
    beta = np.arccos(  (-b**2 + c**2 + a**2) /(2.*a*c) )
    gamma = np.pi-alpha-beta
    return alpha, beta, gamma

def calc_point(alpha, beta, c):
    x = (c*np.tan(beta) )/( np.tan(alpha)+np.tan(beta) )
    y = x * np.tan(alpha)
    return (x,y)

def get_triangle(a,b,c):
    z = np.array([a,b,c])
    while z[-1] != z.max():
        z = z[[2,0,1]] # make sure last entry is largest
    alpha, beta, _ = calc_angles(*z)
    x,y = calc_point(alpha, beta, z[-1])
    return [(0,0), (z[-1],0), (x,y)]

a = 4
b = 3
c = 2

fig, ax = plt.subplots()
ax.set_aspect("equal")

dreieck = plt.Polygon(get_triangle(a,b,c))
ax.add_patch(dreieck)
ax.relim()
ax.autoscale_view()
plt.show()

您是否在问如何绘制三角形?(大部分代码似乎与问题无关,因为它只涉及验证用户输入。)@kazemakase是的,我在问如何根据输入绘制三角形,所以如果var x=5y=7z=7,程序应该用这些绘制三角形sides@kazemakasematplotlib使用坐标,你给他坐标,它会为你绘制图像。对于一个三角形,你有3个x和3个y,(0,0),(1,0),(1,1)是一个示例。您可以使用plot函数将其绘制为x=[0,1,1],y=[0,0,1]ax.plot(x,y)。当然,如果您希望这些值来自输入,只需创建一个for循环,供用户输入数据并分别附加到列表中。感谢@gabrielbelini,但是否可以给出边的长度,matplotlib将绘制三角形?(不提供坐标)@Radu033这是不可能的。您需要自己计算坐标。感谢您的精彩解释和优秀代码,一切都有意义:)