ich bin gerade am verzweifeln mit einer meiner Hausaufgaben und würde mich sehr freuen, wenn ich hier vielleicht einen neuen Gedankenanstoß finden könnte.
Die Aufgabe fordert eine Funktion convex_polygon der als Argumente Tupel von n Eckpunkten in Form von ((x1,y1),(x2,y2),...) übergeben werden. Dann werden n-2 Teildreiecke gebildet, deren summierte Flächen der Fläche des Polygon entsprechen.
Folgenden Code habe ich schon geschrieben:
Code: Alles auswählen
import math
def triangle_area(a, b, c): # Initialisierung der triangle_area-Funktion
if max(a,b,c)<(a+b+c-max(a,b,c)):
s = (a + b + c)/2
area = ((s * (s-a)*(s-b)*(s-c))**0.5)
return area
else:
return False
def distance(p1,p2): # Gibt den Abstand zwischen zwei Punkten (x1,y1) und (x2,y2) aus.
return (math.sqrt((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2))
pointNumber = int(input('Wie viele Punkte möchtest du eingeben?'))
points = [] # Liste für die Punkte-Tupel. Sieht am Ende bspw. so aus: [(1,1),(3,4),(1,5),(2,6)]
for i in range(0,pointNumber): # Eingabe der Punkte als einzelne x oder y Werte, also nicht in Tupeln
addPointX = int(input('Bitte x von Punkt eingeben'))
addPointY = int(input('Bitte y vom Punkt eingeben'))
addPoint = (addPointX, addPointY)
points.append(addPoint)
# Folgender Code würde auch den Flächeninhalt ausgeben, aber nicht auf die geforderte Weise mit Teildreiecken, sondern mit der Gaussschen Trapezformel.
"""
values = input("Koordinaten in Form x1,y1,x2,y1,... eingeben: ")
x = tuple(map(int, values.split(",")))
for i in range(1,len(x)):
A = ((x[1] + x[3])*(x[0] - x[2])+(x[3] + x[5])*(x[2] - x[4])+(x[5] + x[7])*(x[4]-x[6])+(x[7]+x[1])*(x[6]-x[0]))/2
print(A)
"""
1. Man der Funktion min. 4 Tupel (x,y) übergeben kann und diese dann der "Reihe" nach ordnet?
2. daraus resultierend: das Programm genau weiß, welche Strecken zwischen den Punkten er der triangle_area-Funktion gibt, um die richtigen Flächen zu berechnen?
Um das kurz klarzustellen: Ich erwarte nicht, dass ihr meine Hausaufgaben löst. Ich brauche nur einen Tipp, um die Lösung dann selber hinzubekommen.