Rundskalen/Zifferblatt-Beschriftung



  • Wie positioniert man die Zahlen auf dem Zifferblatt einer Uhr oder der Skala eines beliebigen runden Zeigerinstruments? So banal wie die Frage klingt, ist das garnicht bei näherer Betrachtung.

    Wenn man davon ausgeht, dass das Zifferblatt ein Kreis ist, der durch radiale Vektoren in Segmente geteilt wird, dann müssten die Zahlen logischerweise so positioniert werden, dass die Mitte jeder Zahl irgendwo auf dem zugehörigen Radiusvektor liegt. Weil die Zahlen aber unabhängig vom Winkel des Radiusvektors immer senkrecht stehen sollen, ergibt sich bei jeder Zahl ein anderer Abstand der Zahlenmitte vom Aussenkreis. Diesen Abstand gilt es zu berechnen - oder irgendwie berechenbar zu machen.

    Für jede Zahl kann man ein die Ziffern umgebendes orthogonales (also immer aus vertikalen und horizontalen Linien bestehendes) Rechteck annehmen. Die Höhe dieser Rechtecke entspricht der Ziffernhöhe und ist immer gleich, die Breite aber variiert mit der Breite der Einzelziffern oder mehrstelligen Zahlen. Diese Rechtecke müssen so positioniert werden, dass die Mitte auf einem Radiusvektor mit bestimmtem Winkel liegt und die jeweils äußerste Ecke den Aussenkreis berührt.

    Bei 0°, 90°, 180° und 270° ist die Berechnung simpel, weil jeweils eine Kante des Rechtecks rechtwinklig zum Radiusvektor liegt und einen Kreisabschnitt bildet. Wenn der Winkel des Radiusvektors zufällig mit dem Winkel der Rechteck-Diagonalen übereinstimmt, ist die Berechnung trivial. Aber wie könnte man die Position der Rechteck-Mitte bei beliebigem Winkel des Radius-Vektors berechnen? Mit Pythagoras, Thales & Co. komme ich da nicht weiter. Hat jemand eine Idee 😕



  • Hmm, also wenn ich dich richtig verstehe, hast du die Breite der Zahl in Pixeln ermittelt und möchtest, dass die obere Kante des umschliessenden Rechtecks an beiden Punkten die Peripherie berührt.
    Letzendlich willst du die Koordinaten des Mittelpunkts dieser Box.

    Ok, ich versuchs mal:

    Die obere Kante(Breite) des Rechtecks nennen wir mal a , sie ist die Sehne.
    Vom Mittelpunkt ausgehend haben wir ja ein gleichschenkliges Dreieck mit 2 Seiten(b,c) der Länge = Radius und a als Basis.
    Das ganze mit dem Öffnungswinkel α, den ich als erstes ausrechne.
    a² = b²+c² - 2abcos α |b = c = Radius r
    a² = r²+r² - 2r²
    cos α |2r² ausklammern
    a² = 2r² (1 - cos α )
    a²/2r² = 1 - cos α

    -a²/2r² + 1 = cos α Öffnungswinkel für Breite der Kante a
    Geht natürlich nur bis zu Breiten des Durchmessers...
    -----------------------------------------------------------------------------
    Nehmen wir mal die 12Uhr Position, also 90°:
    Jetzt muss die Mitte des Öffnungswinkels auf diesen 90° liegen.
    Mit α1 = 90°-(α/2) und α2 = 90° + α/2 hast du die Winkel der beiden Seiten des Rechtecks.

    Du kannst nun also die linke obere Ecke errechnen mit x=cos(α1)*r ; y=sin(α1)*r;
    Für die unteren Ecken nimmst du statt r r-klein = r - Fonthöhe;
    Und die Mitte der Box müsste dann x = cos(90°) * (r - Fonthöhe/2) sein.



  • Sorry, das war gerade nicht das Problem. Bei den Quadrantenwinkeln, wenn die Rechtecke mit zwei Eckpunkten auf dem Kreis liegen, ist der Fall klar. Auch in dem Sonderfall wenn der Winkel des Radiusvektors gleich dem Winkel der Rechteck-Diagonalen ist (dann ist der Abstand des Rechteck-Mittelpunkts zum Kreis gleich der Hälfte der Rechteck-Diagonalen). Das Problem liegt bei den Winkeln dazwischen. Hier gibt's anscheinend keine Möglichkeit, zur Verdeutlichung ein Bild einzustellen oder als Anhang mitzugeben, also versuch' ich's nochmal formal:

    Nehmen wir an: einen Kreis mit Mittelpunkt X,Y und Radius R und ein Rechteck mit Höhe H und Breite B (was zwangsläufig deutlich kleiner ist als der Kreis). Gesucht ist die Position des Rechteck-Mittelpunkts (Xm,Ym) auf einem Radiusvektor im Winkel α, so dass die jeweils äußerste Ecke des Rechtecks (Xe=Xm±B/2; Ye=Ym±H/2) auf dem Kreis liegt, also gilt √(Xe-X)²+(Ye-Y)² = R und √(Xm-X)²+(Ym-Y)² < R

    Das ist aber nur die halbe Miete. Um nach Xe und Ye auflösen zu können, brauche ich noch einen zweiten Ansatz, der die Winkel ins Spiel bringt. Und da klemmt's irgendwie.

    Bekannt bzw. berechenbar sind noch:
    Länge der Rechteck-Diagonalen: D = √B²+H², Abstand von Xe,Ye nach Xm,Ym = D/2
    Winkel der Rechteck-Diagonalen: β = atan(H/B) = asin(H/D) = acos(B/D)
    Endpunkt des Radiusvektors auf dem Kreis: Xk = X+R*cos(α); Yk = Y+R*sin(α)
    Genauso gilt Xe = X+R*cos(γ); Ye = Y+R*sin(γ) wobei der Winkel γ vom Mittelpunkt des Kreises zum Eckpunkt des Rechtecks allerdings auch nicht bekannt
    - ähm -
    jetzt fällt's mir wie Schuppen aus den Haaren: die Punkte X,Y und Xe,Ye und Xm,Ym bilden ein Dreieck, von dem zwei Seiten (R und D/2) und ein Winkel (β-α) bekannt sind - typischer Anwendungsfall für den Cosinussatz - und der Fall ist erledigt.

    Wieder mal ein Beispiel für die alte Weisheit: Manchmal reicht es schon, Anderen ein Problem detailliert zu schildern, um einen Denkanstoß zu erhalten. Den Kick hab' ich jetzt gebraucht ... 🙄


Anmelden zum Antworten