Zwei Kreise

Hallo,

ich habe hier ein Problem. Bin auch nicht mehr der jüngste, und die Schule ist schon sehr lange vorbei !

Das Problem:
Ich programmiere mit BlitzBasic zur Zeit Zahnräder.
Man kann diese verschieben, vergrößern und verkleinern, jeweils um eine Zacke. Das funktioniert einwandfrei.
Das Zahnrad wird auch am Rande des anzudockenden Zahnrades positioniert, und kann frei, je nach Maus-Position, da rundherum verschoben werden.
Wenn das Zahnrad, welches ich gerade verschiebe, an einem anderen Zahnrad andockt, tritt da das Problem auf, daß diese meistens verschieden viele Zacken haben.

Ich brauche nun eine Formel, die mir sagt, wie oft das verschobene Zahnrad (Kreis) um das angedockte Zahnrad (Kreis) sich dreht.

Also, wie oft dreht sich ein Kreis um einen anderen Kreis, wenn sich dieser auf der Umlaufbahn desselben dreht ?

Wäre sehr dankbar für Antworten. Hänge hier nämlich schon sehr lange fest !

mfg, Toni

Hallo Toni,

Ich brauche nun eine Formel, die mir sagt, wie oft das
verschobene Zahnrad (Kreis) um das angedockte Zahnrad (Kreis)
sich dreht.

Also, wie oft dreht sich ein Kreis um einen anderen Kreis,
wenn sich dieser auf der Umlaufbahn desselben dreht ?

für zwei miteinander gekoppelte Zahnräder Z1 und Z2 gilt:

 Drehgeschwindigkeit von Z1 Anzahl der Zähne von Z2
---------------------------- = - -------------------------
 Drehgeschwindigkeit von Z2 Anzahl der Zähne von Z1

und entsprechend für zwei „schlupffrei“ miteinander gekoppelte Scheiben S1 und S2:

 Drehgeschwindigkeit von S1 Radius von S2
---------------------------- = - ---------------
 Drehgeschwindigkeit von S2 Radius von S1

Mit freundlichem Gruß
Martin

Hallo,
das müßte sich doch über das Verhältnis der Zacken bestimmen, wenn man annimmt, daß sich beide Zahnräder um jeweils eine Zacke weiterdrehen. Bsp. Zahnrad A hat 30 Zacken, Zahnrad B 90 Zacken, dann hat sich Zahnrad A bei einer „Umrundung“ von B 90/30=3 mal gedreht.

Gruss
Enno

Danke Martin !

Wahrscheinlich ist die Hitze hier in Graz so mörderisch, aber ich bekomm das einfach nicht hin.

Kreis oder Zahnrad ist egal.

Habe hier ein konkretes Beispiel :

radius Kreis1= 80 Zähne-anzahl 72
radius Kreis2= 40 Zähne-anzahl 36

Ich setze beide Kreise auf Dreh-winkel 0.
Nun lasse ich den Kreis1 auf der Umlaufbahn von Kreis2 abrollen.
Code:
For i=0 to 359
dreh(Kreis1)=dreh(Kreis1)+ (Kreis2/Kreis1)
Next

Das stimmt soweit auch.
Da ich nun aber Zacken habe, wie berechne ich das nun ?

Danke für die Antworten !

Toni

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nochmal hallo

Kreis oder Zahnrad ist egal.

Habe hier ein konkretes Beispiel :

radius Kreis1= 80 Zähne-anzahl 72
radius Kreis2= 40 Zähne-anzahl 36

Ich setze beide Kreise auf Dreh-winkel 0.
Nun lasse ich den Kreis1 auf der Umlaufbahn von Kreis2
abrollen.
Code:
For i=0 to 359
dreh(Kreis1)=dreh(Kreis1)+ (Kreis2/Kreis1)
Next

Nee, ich glaub, so kommt das nicht hin. Das „+“ muß unbedingt ein „*“ sein, und das i muß im Schleifeninneren verwendet werden. Probier mal etwas in der Art von dem hier (das „N“, mit dem einige Variablennamen anfangen, bedeutet „Anzahl“):

NZaehne1 := 72;
NZaehne2 := 36;
speed := 1.0;
NUmdrehungen := 3;
'
v := NZaehne2/NZaehne1; {Drehgeschwindigkeitsverhältnis}
'
For i := 0 to NUmdrehungen\*360 do
 begin
 drehwinkel1 := speed \* i; 
 drehwinkel2 := drehwinkel1 \* v; 
 end;

Statt „v := NZaehne2/NZaehne1“ mußt Du dann gegebenenfalls (Scheiben statt Zahnräder) durch „v := Radius2/Radius1“ ersetzen.

Kommst Du damit weiter?

Mit freundlichem Gruß
Martin

1 „Gefällt mir“

Hallo !

Nee, ich glaub, so kommt das nicht hin. Das „+“ muß unbedingt
ein „*“ sein, und das i muß im Schleifeninneren verwendet
werden. Probier mal etwas in der Art von dem hier (das „N“,
mit dem einige Variablennamen anfangen, bedeutet „Anzahl“):

NZaehne1 := 72;
NZaehne2 := 36;
speed := 1.0;
NUmdrehungen := 3;

v := NZaehne2/NZaehne1; {Drehgeschwindigkeitsverhältnis}

For i := 0 to NUmdrehungen*360 do
begin
drehwinkel1 := speed * i;
drehwinkel2 := drehwinkel1 * v;
end;

Statt „v := NZaehne2/NZaehne1“ mußt Du dann gegebenenfalls
(Scheiben statt Zahnräder) durch „v := Radius2/Radius1“
ersetzen.

Kommst Du damit weiter?

Mit freundlichem Gruß
Martin

Ich glaube, nun hab ich es !

xko(1)= x-koordinate vom verschiebendem Kranz
yko(1)= y-

xko(2)= x-koordinate vom Andock- Kranz
yko(2)= y-

radius(1)= Radius vom verschiebenden Kranz
radius(2)= Radius vom Andock-Kranz

Mit dem Befehl ATAN2 bekomme ich den Winkel vom Andock-Kranz zur aktuellen Mausposition.

ATan2_winkel = (ATan2(MouseY()-yko(2),MouseX()-xko(2)) + 360) Mod 360

Hier zeichne ich eine Linie vom Mittelpunkt des Andock-Kranzes bis zur Mitte des verschiebenden Kranzes.

Line xko(2),yko(2),xko(2)+Cos(ATan2_winkel)*(radius(2)+radius(1)),yko(2)+Sin(ATan2_winkel)*(radius(2)+radius(1))

Und hier ist nun das Sorgenkind:

dreh(1)=ATan2_winkel+dreh(2)+ATan2_winkel*(pu(2)/pu(1))

Obwohl dreh(2) hier weggelassen werden kann, da es im Moment ja 0 ist.

Und hier wird noch der zu verschiebende Kranz richtig positioniert.

xko(1)=xko(2)+Cos(ATan2_winkel)*(radius(2)+radius(1)+10)
yko(1)=yko(2)+Sin(ATan2_winkel)*(radius(2)+radius(1)+10)

Ich möchte mich recht herzlich für die Hilfe bedanken !

Toni

Hallo !

Ich glaube, nun hab ich es !

xko(1)= x-koordinate vom verschiebendem Kranz
yko(1)= y-

xko(2)= x-koordinate vom Andock- Kranz
yko(2)= y-

radius(1)= Radius vom verschiebenden Kranz
radius(2)= Radius vom Andock-Kranz

Mit dem Befehl ATAN2 bekomme ich den Winkel vom Andock-Kranz
zur aktuellen Mausposition.

ATan2_winkel = (ATan2(MouseY()-yko(2),MouseX()-xko(2)) + 360)
Mod 360

Hier zeichne ich eine Linie vom Mittelpunkt des Andock-Kranzes
bis zur Mitte des verschiebenden Kranzes.

Line
xko(2),yko(2),xko(2)+Cos(ATan2_winkel)*(radius(2)+radius(1)),yko(2)+Sin(ATan2_winkel)*(radius(2)+radius(1))

Und hier ist nun das Sorgenkind:

dreh(1)=ATan2_winkel+dreh(2)+ATan2_winkel*(pu(2)/pu(1))

Obwohl dreh(2) hier weggelassen werden kann, da es im Moment
ja 0 ist.

Und hier wird noch der zu verschiebende Kranz richtig
positioniert.

xko(1)=xko(2)+Cos(ATan2_winkel)*(radius(2)+radius(1)+10)
yko(1)=yko(2)+Sin(ATan2_winkel)*(radius(2)+radius(1)+10)

Ich möchte mich recht herzlich für die Hilfe bedanken !

Toni

Sodann, das ganze ist aber noch nicht zu Ende !

Es funktioniert zwar wunderbar, aber nur, wenn der Winkel des
Andock-Kranzes 0 ist. Habe hier nur diese Lösung gefunden, daß ich alle Kränze solange drehen lasse, bis der Andock-Kranz den Winkel 0 hat !

Möchte das nun aber anders lösen.
Wie kann ich, wenn der Winkel z.B. des Andock-Kranzes auf 110 steht, das berechnen ?
Also:

dreh(1)=0
dreh(2)=110

Ansonsten die gleichen Daten wie oben.

Aus diesem Code soll irgendwann sowas ähnliches wie Incredible-Machine oder Tim entstehen !

Wer mal Lust hat, kann sich von mir ja ein Game anschauen:

http://members.chello.at/hot-bit/diverses/kamik154.zip

Hat ca. 2.5 MB

oder ein Denk-Spiel:

http://members.chello.at/hot-bit/diverses/ballpick.zip

Hat 440 KB

Ok, bin auf die Lösung gespannt !

Toni