うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

大きさが変動するテキストの描画位置を揃える

課題

自由な点Aに対して、数値

a = x(A) + sqrt(y(A)) / x(A)

および、テキスト

text1 = If[true, SurdText[a]] *1

を作成する。

下図のように、text1の右端中央が、常に点Aの左側に来るように揃えるには、どうすればよいか。

f:id:usiblog:20190906132813g:plain

 

うまくいかない例

text1の位置をAに設定しても、うまく揃わない。これは、Aの座標によって、text1の大きさが変動するためである。

f:id:usiblog:20190906134430g:plain

 

解答例

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 スクリプトを実行した際に、分数の自然表示を維持するために、現バージョンにおいて必要であるため、ご容赦されたい。