n kleine Kreise in einem Grossen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

n kleine Kreise in einem Grossen

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4885
Registriert: Fr 8. Apr 2011, 09:01

Re: n kleine Kreise in einem Grossen

Beitrag von wp_xyz »

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.

Mathias
Beiträge: 6193
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: n kleine Kreise in einem Grossen

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4885
Registriert: Fr 8. Apr 2011, 09:01

Re: n kleine Kreise in einem Grossen

Beitrag von wp_xyz »

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

Ich glaube nicht.

Antworten