大きさが変動するテキストの描画位置を揃える
課題
自由な点Aに対して、数値
a = x(A) + sqrt(y(A)) / x(A)
および、テキスト
text1 = If[true, SurdText[a]] *1
を作成する。
下図のように、text1の右端中央が、常に点Aの左側に来るように揃えるには、どうすればよいか。
うまくいかない例
text1の位置をAに設定しても、うまく揃わない。これは、Aの座標によって、text1の大きさが変動するためである。
解答例
AのOn Update スクリプトとして、以下を設定する。
SetValue[text1,Text[text1,A]]
UpdateConstruction[ ]
SetValue[text1,Text[text1,(-0.2,0)+A-Vector[A,Midpoint[Corner[text1,2],Corner[text1,3]]]]]
1行目で、いったんAに揃え、2行目で描画を更新する。3行目は、
SetValue[ <テキスト>, Text[ <テキスト> , <基準点> - Vector[ <基準点>, <テキストの任意の位置> ] ] ]
という構文である。これによって、指定したテキストの任意の位置を、基準点に揃えることができる。
たとえば、text1の左下隅の点Corner[text1,1]を、点Aに揃えたい場合には、3行目を
SetValue[text1,Text[text1,A - Vector[A,Corner[text1,1]]]]
とする。ここから、text1の描画位置を、さらに(p,q)だけずらすには、
SetValue[text1,Text[text1, (p,q) + A - Vector[A,Corner[text1,1]]]]
とすればよい。
応用例:コサインの値をx軸上に表示する
https://www.geogebra.org/m/gbwv4b4n
各種オブジェクトの定義
c = Circle[(0, 0), 1]
α = 0°(最小値0°、最大値360°、増分1°でスライダーも作成)
A = (cos(α), 0)
a = 180α / π + 0
l1 = {30, 45}
l2 = Unique[Flatten[Zip[Sequence[δ γ, γ, 1, 360 / δ], δ, l1]]]
decider = a ∈ l2
rightSideText = If[decider, SurdText[cos(α)], Text[cos(α)]]
αのOn Update スクリプト
UpdateConstruction
SetValue[rightSideText,Text[rightSideText,A]]
UpdateConstruction
If[α< π ,SetValue[rightSideText,Text[rightSideText,(0,-0.1)+A-Vector[A, Midpoint[Corner[rightSideText, 3],Corner[rightSideText, 4]]]]]]
If[α>= π ,SetValue[rightSideText,Text[rightSideText,A-Vector[A, Midpoint[Corner[rightSideText, 1],Corner[rightSideText, 2]]]]]]
*1:このIf[true,...の部分は、一見ヤバい構文だが、後ほどOn Update スクリプトを実行した際に、分数の自然表示を維持するために、現バージョンにおいて必要であるため、ご容赦されたい。