In Python einen Kreis um einen anderen drehen?
Ich habe eine Aufgabe bekommen, in der ich in Python einen Innenkreis (in der Mitte eines Koordinatensystems) und einen Außenkreis (kleiner als der Innenkreis) gegeben habe. Die beiden Kreise berühren sich dabei immer an einer Stelle und der äußere Kreis dreht sich um den inneren. (siehe Bild)
In der Vorlesung hatten wir aber nur eine Kugel, die sich von einem zum anderen Rand bewegt, aber keine Drehungen und deswegen hab ich echt keine Ahnung, wie ich das realisieren soll, ohne großartig irgendwelche Module/ Funktionen aus dem Internet zu nehmen.
Hattet ihr so eine Aufgabe schonmal? :)
3 Antworten
Ich würde so ran gehen, dass man ein kleinen und einen großen Kreis, der die Mitte der 0 Punkt ist zeichen würde. Der große Kreis würde ich für den Mittelpunkt für den kleinen (in dem Bild schwarzen) Kreis ist.
(Ich würde es auch mit einer GUI Labrary wie pygame oder turte machen)
Also ein Beispiel. 5cm kleiner Kreisradius, 8cm großer Kreisradius. Dann würde ich ein Punkt von dem großen Kreis nehmen und dort je ein 3cm großen Kreis zeichnen. Jetzt kann man mit einer for schleife jeden Punkt nehmen und dann den kleinen Kreis zeichnen.
Hier wäre eine Skizze.
Ich hoffe du konntest es verstehen und wenn du Fragen hast, oder es möchtest, dass ich dir ein Beispielprogramm programmieren soll kannst du es mir einfach schreiben.
Würde es halt mal mit Pygame (eigentlich um Spiele zu entwickeln) (turtle ist glaub ich besser, aber ich kenn mich eher mit Pygame aus) ein Beispielprogramm schreiben, sodass du ein Eindruck dafür gewinnst
Hallo,
folgender Python-Code mit der Pygame Library sollte funktionieren. Es werden die Punkte berechnet, die als Mittelpunkte des kleineren Kreises dienen. Jedes Mal, wenn der Kreis gezeichnet wird, wird der nächste Punkt als neuer Mittelpunkt gewählt. Je mehr Punkte du hast, desto langsamer bewegt sich der kleinere Kreis.
Ich hoffe ich konnte helfen.
import pygame
import math
WIDTH = 800
HEIGHT = 800
RADIUS_CIRCLE_1 = 100
RADIUS_CIRCLE_2 = 50
POINTS = 200
START_POSITION = 0
points = []
def calculatePoints():
#Calculates all points of the center position of the smaller circle
increment = 360/POINTS
for i in range(POINTS):
angle = i*increment
x = WIDTH/2 + math.cos(math.radians(angle))*(RADIUS_CIRCLE_1+RADIUS_CIRCLE_2)
y = HEIGHT/2 + math.sin(math.radians(angle))*(RADIUS_CIRCLE_1+RADIUS_CIRCLE_2)
points.append([x, y])
def drawCircles(win):
global START_POSITION
#Draw the center circle
pygame.draw.circle(win, (0,0,255), (WIDTH/2, HEIGHT/2), RADIUS_CIRCLE_1, 3)
#Draw the smaller circle
pygame.draw.circle(win, (0,0,0), points[START_POSITION], RADIUS_CIRCLE_2, 3)
#+= 1 -> Move clockwise, -= 1 -> Move counterclockwise
START_POSITION += 1
if START_POSITION == POINTS-1 or START_POSITION == -POINTS-1:
START_POSITION = 0
calculatePoints()
def main():
win = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
run = True
while run:
clock.tick(30)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
break
win.fill((255, 255, 255))
drawCircles(win)
pygame.display.flip()
pygame.quit()
if __name__ == "__main__":
main()
Nein hatte ich noch nicht, ich würde erstmal mathematisch schauen wie man beide Kreise und dann die Positionen von diesen ausrechnet, soll ja variabel sein. Dann schauen vermutlich tkinter (gui library für python) nutzen zum Zeichnen der Kreise. Wenn ich nachher Zeit habe und es noch keine gute Antwort gab schaue ich mal genauer nach
Ich hätte glaub eher andere GUI Librarues verwendet. Z.b. Turtle oder Pygame. Oder was denkst du?
Vielen Dank, das ist schonmal ein guter Ansatz :) Wie würde denn so ein Beispielprogramm aussehen?