Simbo: Tag Cloud: Algorithmus für Schriftgröße

Servus miteinander...

ich arbeite gerade an einer PHP Klasse, die anhand eines Arrays mit Tags und deren Häufigkeit eine Tag-Cloud erstellen soll.

Die minimale und maximale Schriftgröße sollen frei wählbar sein, ebenso die Einheit (px, pt, oder em).

Als Formel zur Berechnung der Schriftgröße hab ich zuerst die bei Wikipedia genannte Formel verwendet. (http://de.wikipedia.org/wiki/Tag_cloud)

Mit dem Ergebnis bin ich aber sehr unzufrieden. Ich hätte gerne "weichere Abstufungen".

Ich hab auf dieser Seite eine Beschreibung für eine "Logarithmische Verteilung der Schriftgrößen" gefunden:
http://www.echochamberproject.com/node/247

Die Graphen dort sehen vielversprechend aus, und ich würde gerne dieselbe Formel verwenden.
Leider komme ich aber mit der Beschreibung dort überhaupt nicht zurecht... und Drupal kann ich nicht...

Kann mir jemand diese Logarithmische Drupal-Formel in PHP übersetzen?

Meine Funktion zur Berechnung der Schriftgröße sieht derzeit so aus:

  
function TagCloudFontsizeDistribution( $count, $mincount, $maxcount, $minsize, $maxsize ) {  
  $s = ( ( ($maxsize-$minsize)*($count-$mincount) ) / ( $maxcount-$mincount ) ) + $minsize;  
  return round($s,0);  
}  

Gruß,

Simon

  1. Wenn mir keiner helfen kann, helf ich mir eben wieder mal selbst... :P

    Kevin Hoffmann's Whitepaper "In Search of the perfect Tag Cloud" hat mir dabei sehr geholfen.
    Wen's interessiert: http://dotnetaddict.dotnetdevelopersjournal.com/tw.htm

    Die dort beschriebene Funktion ist im Grunde genau dieselbe wie auf der Seite des EchoChamberProjects, aber nicht in Pseudo-Programmiersprache... :)

    Wie auch immer... ich hab sie in PHP übersetzt und dabei ziemlich gekürzt...
    Am Ende kam das dabei raus:

      
    function GetTagSizeLogarithmic( $count, $mincount, $maxcount, $minsize, $maxsize ) {  
        $steps = $maxsize-$minsize;  
        $delta = ($maxcount-$mincount)/$steps;  
        while( log($count+2)>log($mincount+$a*$delta+2) && $a<$steps ) $a++;  
        return $minsize+$a;  
      }  
    
    

    Funktioniert perfekt...

    Falls einer von euch mal in irgendeiner Form ne Tag-Cloud machen will, viel Spaß damit...
    Die Funktion lässt sich auch z.B. für Farbwerte verwenden.

    Gruß

    Simon