Wie oft dreht sich ein Kreis um sich selbst, wenn dieser entlang der Linie eines zweiten Kreises gleichen Durchmessers bewegt wird?
2KREISE zeigt zwei Kreise gleichen Durchmessers, die sich in einem Punkt berühren. Durch Betätigen des Schalters Run kann der rote Kreis um den blauen Kreis gerollt werden.
Der Mittelpunkt des roten Kreises bewegt sich im Abstand r auf einer Kreisbahn um den Mittelpunkt des blauen Kreises. Ausgangspunkt sei P mit den bekannten Koordinaten (x,y). Nach einer Drehung um den Winkel b wird der Zielpunkt P' mit den Koordinaten (x',y') erreicht.
sin(b+a) = y' / r | (1) folgt aus den Verhältnisse im Zielpunkt, vgl. Abbildung. |
cos(b+a) = x' / r | (2) wie (1) |
y' = r sin(b+a) | (3) folgt aus (1) |
x' = r cos(b+a) | (4) folgt aus (2) |
y' = r (sin(b) cos(a) + cos(b) sin(a)) | (5) folgt aus (3) mit Hilfe des Additionstheorems. |
x' = r (cos(b) cos(a) - sin(b) sin(a)) | (6) folgt aus (4) mit Hilfe des Additionstheorems. |
sin(a) = y / r | (7) folgt aus den Verhältnisse im Ausgangspunkt, vgl. Abbildung. |
cos(a) = x / r | (8) wie (7) |
y' = x sin(b) + y cos(b) | (9) folgt aus (5) und (7) |
x' = x cos(b) - y sin(b) | (10) folgt aus (6) und (8) |
// Ursprung des Kreis 3 relativ zu Kreis 2
x = m_Kreis3.ptCenter.x - m_Kreis2.ptCenter.x;
y = m_Kreis3.ptCenter.y - m_Kreis2.ptCenter.y;
// Drehung von Kreis 3 um Kreis 2
x2 = x * cos_b + y * sin_b;
y2 = y * cos_b - x * sin_b;
// Runden
dxx2 = (x2 >= 0.5) ? 0.5 : (x2 <= -0.5) ? -0.5 : 0;
dyy2 = (y2 >= 0.5) ? 0.5 : (y2 <= -0.5) ? -0.5 : 0;
// neuer Urpsrung des Kreis 3 relativ zu Kreis 2
m_Kreis3.ptCenter.x = (long)(x2 + dxx2);
m_Kreis3.ptCenter.y = (long)(y2 + dyy2);
// neuer Ursprung des Kreis 3
m_Kreis3.ptCenter.x += m_Kreis2.ptCenter.x;
m_Kreis3.ptCenter.y += m_Kreis2.ptCenter.y;
Die Rollbewegung oder Drehung des roten Kreises um sich selbst kann nur durch farbige Unterschiede visualisiert werden, am einfachsten, wie hier zum Beispiel durch eine grüne Radiuslinie.
Durch die Rollbewegung haben stets beide Kreise entlang einer Wegstrecke der Länge (b1 • r1) = (b2 • r2) kontakt.
Da hier wie vorausgesetzt die Radien r1, r2 beider Kreise gleich groß sind, sind auch die überstrichenen Winkel b1, b2 gleich groß: r1 = r2 = r —> b1 = b2 = b.
Hat der rote Kreis also P' erreicht, so bildet die Radiusline jetzt im Vergleich zur Ausgangsposition einen Winkel von g = 2 • b. Und hieraus folgt unmittelbar, daß der rote Kreis sich zweimal um sich selbst gedreht haben muß, wenn dieser einmal vollständig entlang des blauen Kreises gerollt ist.
// Zielpunkt der Linie relativ zum Ausgangspunkt
x = m_Linie.pt[1].x - m_Linie.pt[0].x;
y = m_Linie.pt[1].y - m_Linie.pt[0].y;
// Drehung von Zielpunkt um Ausgangspunkt
x2 = x * cos_2b + y * sin_2b;
y2 = y * cos_2b - x * sin_2b;
// Runden
dxx2 = (x2 >= 0.5) ? 0.5 : ((x2 <= -0.5) ? -0.5 : 0);
dyy2 = (y2 >= 0.5) ? 0.5 : ((y2 <= -0.5) ? -0.5 : 0);
// neuer Zielpunkt der Linie
m_Linie.pt[1].x = (long)(x2 + dxx2);
m_Linie.pt[1].y = (long)(y2 + dyy2);
// neuer Zielpunkt der Linie
m_Linie.pt[1].x += m_Kreis3.ptCenter.x;
m_Linie.pt[1].y += m_Kreis3.ptCenter.y;
// neuer Ausgangspunkt der Linie
m_Linie.pt[0].x = m_Kreis3.ptCenter.x;
m_Linie.pt[0].y = m_Kreis3.ptCenter.y;
Der Drehwinkel und die Timer-Frequenz wurden im Programm so gewählt, daß der Eindruck einer kontinuierlichen Bewegung entsteht.
Download | Datei: 2kreise.zip, Größe: 108 KB (110.863 Bytes) Kennwort: f-i-esierk2 MD5-Signatur: 977e3729ff5ff5674f8799412e2676a0 Inhalt: 2kreise.exe, 2kreise.hlp, 2kreise.cnt. |
Das angebotene Programm darf vorbehaltlich aller Rechte frei genutzt, jedoch nicht zu gewerblichen Zwecken weitergegeben werden; vorausgesetzt, dass im Falle der Weitergabe, der vollständige und unveränderte Inhalt der gepackten Datei weitergegeben wird. Die Nutzung liegt in der Eigenverantwortung des Anwenders. Jegliche Haftungsansprüche an den Hersteller sind ausgeschlossen.