n kleine Kreise in einem Grossen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.

n kleine Kreise in einem Grossen

Beitragvon Mathias » 23. Jan 2016, 17:36 n kleine Kreise in einem Grossen

Ich will in einem grossen Kreis mehrere kleine Kreise zeichnen.
Die kleinen Kreise sollten sich gegenseitig berühren, auch sollten sich die kleinen Kreise sich links und rechts berühren.

Das Gebilde sollte etwa so aussehen, nur sollte es auch bei anderen Kreiszahlen als nur bei sechs funktionieren.
Bild

Wen ich wüsste, wie ich den Radius der kleinen Kreise berechnen kann, ist mir schon recht gedient.

Code: Alles auswählen
function getRadius(Radius_Kreis_gross: single; Anzahl_kleine_Kreise: integer): single;
begin
  Result := 0;   // Formel gesucht.
end
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3056
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 23. Jan 2016, 17:51 Re: n kleine Kreise in einem Grossen

Das ist keine Frage für Lazarus, sondern für die Geometrie-Stunde...

  • Der Radius des großen Kreises sei R, der der kleinen Kreise sei r. Der Radius des (nicht gezeichneten) Kreises, auf dem die Mittelpunkte der kleinen Kreise liegen, sei r'.
  • Es gilt: r' = R - r
  • Da sich 6 kleine Kreise berühren, spannen die Mittelpunkte benachbarter kleiner Kreise zum Mittelpunkt des großen Kreises einen Winkel von 60° auf. Anders ausgedrückt: der Winkel zwischen Berührungspunkt zweier Kreise und Mittelpunkt eines kleines Kreises, vom Mittelpunkt des großen Kreises aus gesehen, beträgt 30°.
  • Die Linie zwischen dem Berührungspunkt zweier Kreise und dem Mittelpunkt des großen Kreises berührt einen kleinen Kreis, d.h. sie ist die Hypothenuse eines rechtwinkligen Dreiecks BMm (B = Berührungspunkt, M = Mittelpunkt des großen Kreises, m = Mittelpunkt eines der beiden kleinen Kreise.
  • Damit kann man den Radius des kleines Kreises berechnen r = Strecke mB = r' * sin30° = (R - r) sin 30°, also r = R sin30° / (1+sin30°)
Die Aufgabe, das auf eine andere Anzahl von kleinen Kreisen zu erweitern, überlasse ich dir.
wp_xyz
 
Beiträge: 2187
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 23. Jan 2016, 18:21 Re: n kleine Kreise in einem Grossen

Danke, dies hat mich weiter gebracht.
Gibt es einen speziellen Namen für diese Berechnung ?

Da habe ich wohl eine Bildungslücke, :oops:

Code: Alles auswählen
function getRadius(r: single; anz: integer): single;
begin
  Result := r * (sin(pi / anz)) / (1 + sin(pi / anz));
end;   
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3056
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 23. Jan 2016, 18:28 Re: n kleine Kreise in einem Grossen

Mathias hat geschrieben:Gibt es einen speziellen Namen für diese Berechnung ?

Ich glaube nicht.
wp_xyz
 
Beiträge: 2187
Registriert: 8. Apr 2011, 08:01

• Themenende •

Zurück zu Programmierung



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried