Ich versuche ein Spiel mit Echtzeitsimulationen von Zahnrädern zu machen. Es gibt ein großes Zahnrad mit einem kleineren Zahnrad.
Ich habe es geschafft, Zahnräder mit unterschiedlichen Durchmessern, aber gleich großen Zähnen zu zeichnen, aber wenn ich versuche, das kleinere innerhalb des größeren zu bewegen, ist die Bewegung merkwürdig.
Siehe das animierte GIF:
Das größte Zahnrad befindet sich in der Mitte C1 und das kleine in der Mitte C2. Ich berechne die C2-Position folgendermaßen:
C2.x = C1.x + C1_RADIUS-C2_RADIUS) * cos(t);
C2.y = C1.y - C1_RADIUS-C2_RADIUS) * sin(t);
für t geht das in n Schritten von 0 nach TWO_PI.
Ich wende als Drehung den Winkel t an, aber vielleicht ist es falsch und ich muss eine andere Drehung berechnen, um eine perfekte Verbindung zu erhalten.
BEARBEITEN:
Ich benutze Bogenmaß für Rotationen und ich denke, das ist in Ordnung.
Mein Hauptproblem ist, dass ich wie in diesem Beispiel eine perfekte Verbindung zwischen den Zähnen erreichen möchte . Meine Zähne überlappen sich auf seltsame Weise.
BEARBEITEN
Ein funktionierendes Beispiel finden Sie hier: http://www.openprocessing.org/sketch/83665
quelle
Antworten:
Das große Zahnrad hat einen Umfang
2πR1
und das kleine hat einen Umfang2πR2
. Wenn das kleine Zahnrad einen vollen Kreis gebildet hat, hat es sichR1/R2
mal um sich selbst gedreht, minus einmal, weil es sich innerhalb des großen Zahnrads gedreht hat (es wäre plus eins, wenn das Zahnrad wäre draußen).Wenn also die Mitte des inneren Zahnrads um einen Winkel gedreht wird
t
, muss das Zahnrad selbst um einen Winkel gedreht werden(R1/R2-1)t
.Wenn die Werte , die Sie behandeln sind Zähnezahlen
N1
undN2
Sie können ersetzenR1/R2
mitN1/N2
.Es gibt auch das Problem der anfänglichen Rotation. Sei
a
der Winkelwertatan2(C2.y - C1.y, C2.x - C1.x)
. Wenden Sie die erste Drehunga
auf Zahnrad 1 an. Wenn sich Zahnrad 2 im Inneren befindet, drehen Siea
es auch darauf. Wenn sich Zahnrad 2 außerhalb befindet, wenden Sie eineπ+a+h
Drehung an,h = π/(2*N2)
die dem halben Winkel eines Zahns entspricht.quelle
R1/R2
mit der Zähnezahl RationN1/N2
.