schlechte Mathematik oder schlechte Programmierung, vielleicht beides?

8

Ich schreibe ein Python-Programm, um die Luna-Free-State-Flagge aus dem berühmten Heinlein-Roman Der Mond ist eine harte Herrin , als persönliches Projekt. Ich habe Heraldik-Regeln und passende mathematische Formeln aus dem Internet gelesen, aber etwas ist eindeutig falsch in meiner bendsinister -Routine, da die Assertion fehlschlägt, wenn sie unkommentiert ist. Der Bereich der unheimlichen Biegung sollte 1/3 der Gesamtfläche der Flagge betragen, und dies ist nicht der Fall. Das einzige wirklich zweifelhafte Ding, das ich gemacht habe, ist die Formel für die Höhe des Trapezes zu erraten, aber ich schätze, die Fehler könnten überall sein. Ich habe den Großteil des Codes entfernt und nur das angezeigt, was nötig ist, um das Problem zu zeigen. Hoffentlich kann jemand, der weniger mathematisch herausgefordert ist, den Fehler erkennen!

%Vor%

Hier ist die Debug-Ausgabe, die zeigt, dass ich weit vom 1/3 Bereich entfernt bin:

%Vor%

Hier ist ein Bild der Ausgabe mit einigen hinzugefügten Zeilen: Die rote Linie teilt die zwei Dreiecke, beide können für die Berechnung des Trapezes verwendet werden. Ich benutze den, der oben links startet. Die grüne Linie ist die Höhe dieses Dreiecks, die Variable H im Programm.

Für das fertige Skript und die Flagge (unter Verwendung der von Michael Anderson gelieferten Korrektur) siehe Ссылка . Danke allen für die Hilfe!     
jcomeau_ictx 26.04.2011, 06:03
quelle

2 Antworten

8

Brechen Sie das Rechteck in zwei Dreiecke. Sie werden identisch sein.

Das schwarze Dreieck + blaue Trapez ist Dreieck A. Das Schwarze Dreieck allein ist Dreieck B

Dreieck A und Dreieck B sind ähnliche Dreiecke, so dass ihre Fläche durch das Quadrat des Skalenfaktors in Beziehung gesetzt wird.

Wir wollen, dass das blaue Trapez ein Drittel der Fläche von Dreieck A ausmacht. (Auf diese Weise nimmt die Biegung ein Drittel des gesamten Rechtecks ​​ein). Dies bedeutet, dass Dreieck B 2/3 Fläche von Dreieck A sein muss. Daher muss der Skalierungsfaktor sqrt (2/3) sein.

Sie sollten dann in der Lage sein, dies zu konvertieren, um Ihnen die Koordinaten der Biegegeometrie ziemlich einfach zu geben.

    
Michael Anderson 26.04.2011, 10:03
quelle
2

Ich habe den folgenden Code in einer IDLE-Sitzung ausgeführt

%Vor%

Ergebnis

%Vor%

Der angezeigte blaue Streifen hat nicht den Eindruck, 1/3 der Feldfläche zu sein, aber die Zahlen sprechen:

%Vor%     
eyquem 26.04.2011 17:42
quelle