Ich versuche, einen Algorithmus mit der Schildkröte zu schreiben.
Die Schildkröte hüpft in einem Polygon und malt einen Teil der Kante, die sie berührt. Der Algorithmus sollte beendet werden, sobald an der Grenze des Polygons keine unbemalten Bereiche mehr vorhanden sind.
Dazu muss ich jede Kante des Polygons überprüfen und feststellen, ob es vollständig bemalt ist.
Gibt es eine solche Funktion in der Turtle-Bibliothek? Wenn nicht, wie lässt sich dies dann auf einfache Weise feststellen? Das Polygon ist nicht unbedingt geradlinig.
Hier ist ein MWE:
Ich versuche, einen Algorithmus mit der Schildkröte zu schreiben. Die Schildkröte hüpft in einem Polygon und malt einen Teil der Kante, die sie berührt. Der Algorithmus sollte beendet werden, sobald an der Grenze des Polygons keine unbemalten Bereiche mehr vorhanden sind. Dazu muss ich jede Kante des Polygons überprüfen und feststellen, ob es vollständig bemalt ist. Gibt es eine solche Funktion in der Turtle-Bibliothek? Wenn nicht, wie lässt sich dies dann auf einfache Weise feststellen? Das Polygon ist nicht unbedingt geradlinig. Hier ist ein MWE: [code]import turtle from sympy import Segment, Point, Ray, N from mpmath import radians
def completely_painted(e): a.goto(N(e.p1.x), N(a.p1.y)) a.setheading(a.towards(N(e.p2.x), N(e.p2.y))) a.goto(N(e.p2.x), N(e.p2.y)) #if a passed through non-painted part: # return False return True
def all_edges_painted(): for e in E: if not completely_painted(e): return False return True
t.penup() t.goto(p1) t.pendown() for p in [p2, p3, p4, p1]: t.goto(p) t.penup() t.goto(5,5) t.setheading(60) t.pendown() pos = Point(t.pos()) vec = Ray(pos, angle=radians(t.heading())) ctr = 0 k = 0 p = -1 turtle.tracer(True) t.speed(10) a.color('red') while True: for e in E: intersections = vec.intersection(e) if len(intersections) > 0: hit = None for i in intersections: if isinstance(i, Point): hit = i if hit == None: continue
ln = e.perpendicular_line(hit) pt = ln.projection(pos) normal = Ray(hit, pt) t.goto(hit) paint(e, N(hit)) rotate = 2 * t.towards(pt.x, pt.y) - 180 - t.heading() t.setheading(rotate) if k == 0: k = 1 elif k == 1: k = 0 pos = Point(t.pos()) vec = Ray(pos, angle=radians(t.heading())) if ctr >= 50: # this should be if all_edges_painted() break ctr += 1
turtle.exitonclick() turtle.done() [/code] Ich habe die Teile auskommentiert, in denen die Methode zur Überprüfung, ob alle Kanten abgedeckt sind, verwendet wird.
Ich möchte, dass für jede Zahl in einer Liste die Anzahl der unterschiedlichen Werte kleiner als diese ist, und ich muss das Ergebnis mit der Eingabe abgleichen (also erzeugen Duplikate doppelte...
Ich habe eine Datumsspalte und andere Spalten mit einigen NAN -Werten. Ich möchte nur ein Diagramm für Nicht-NAN-Werte haben, aber es gibt Segmente zwischen 2 Nicht-NAN-Werten (siehe Bild)....
Bearbeiten: Ich habe das Problem gefunden. Einige Linien fehlten, was zu diesen unerwünschten Segmenten in der Grafik führte. Ich konnte diese Segmente löschen , indem ich fehlende Daten mit Nan...
Ist es möglich, zur Kompilierungszeit oder zur Laufzeit festzustellen, ob ein in einem Makro oder einer Funktion übergebenes Argument ein Zeichenfolgenliteral ist?