テキストの高さ、および描画開始点の位置
テキストのピクセル数
テキストオブジェクトは、スタイルバーまたはプリファレンスで、サイズを指定できる。選べるサイズは、微小(Extra Small)、特小(Very Small)、小(Small)、中(Medium)、大(Large)、特大(Very Large)、巨大(Extra Large)である(カッコ内は英語モードでの名前)。
下図は、スタイルバーでサイズを指定する際の画面である。
テキストの幅は、文字の種類および数によって変化する。これに対して、テキストの高さは、文字の種類および数によらず一定である。
そして、テキストの高さは、フォントサイズと、テキストサイズによって変化する。
フォントサイズおよびテキストサイズと、テキストの高さおよび描画開始点の位置との間に、何らかの法則性を見出すことはできるだろうか。
なお、本記事は、テキストオブジェクトの行数が1行である場合を前提としている。2行以上のテキストオブジェクトには、以下の議論は当てはまらない。
以下の表は、フォントサイズの値(pt)およびテキストサイズの値(sizeM*1)に応じて、テキストの高さ、および描画開始点の位置を測定した結果である。
表中の測定値は、ピクセル単位である。測定値の意味は、下図の通りである。
詳細な分析
ptやsizeMの値を変化させたときの、各種測定値の変化を観察できるアプレットを作成した。
一般化
上記アプレットによる分析の結果、以下の法則が成り立っていることが確認できた。
なお、以下では、テキストの高さをheight, 隅4〜開始点の高さをspHeightと表記する。
pt,sizeMからheightを求める
height = floor(1.5floor( pt(sizeM-1) )+1.5pt+6)・・・①
ただし、ptの値にかかわらず、heightの最小値は12である。
pt,heightからsizeMを求める
ptを定数とする。このとき、あるheightを与えるsizeMは、一意には求まらない*2。しかし、
sizeM* = (height - 5) / (1.5pt)
とすると、sizeMをsizeM*に設定することによって、テキストの高さをheight*3にすることができる。
隅4〜開始点の幅
隅4〜開始点の幅 = 3(一定)
pt,sizeMからspHeightを求める
spHeight = floor( pt(sizeM-1) )+pt+3
ただし、ptの値にかかわらず、spHeightの最小値は7である*4。
pt,spHeightからsizeMを求める
ptを定数とする。このとき、テキストにあるspHeightを与えるsizeMは、一意には求まらない。しかし、
sizeM** = (spHeight - 3) / pt
とすると、sizeMをsizeM**に設定することによって、隅4〜開始点の高さをspHeightにすることができる。
heightからspHeightを求める
spHeight = floor( (height - 5) / 1.5 + 3 )
pt,sizeMからsizeを求める
size = ceil( pt(sizeM-1) )
バージョン情報
この記事の内容は、以下のバージョンのGeoGebraで検証した。
Version: 6.0.509.0-w (04 November 2018)
*1:sizeMは、XMLデータのfont タグ内にみられる値であり、テキストサイズの関数であると思われる。
*2:当該heightを与えるsizeMが存在しない場合もある。たとえば、pt=16で、height=44を与えるsizeMは存在しない。
*3:当該heightを与えるsizeMが存在しない場合には、当該heightに1を加えた値。
*4:
①より、heightに最小値12を与えるsizeMの一つは、
sizeM* = (12 - 5) / (1.5pt)
である。sizeMの値がsizeM*であるとき、
spHeight = floor( pt(sizeM*-1) )+pt+3
= floor( pt( ( (12 - 5) / (1.5pt) )-1) )+pt+3・・・(★)
(★)の値は、ptが整数であるならば、一定値7をとる。 観察によると、これが、spHeightの最小値であることが分かった。