うしブログ

うしブログ

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

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

字幕をつける

※前提として、InternalCorner ツールが必要です。

f:id:usiblog:20180826081906g:plain

①テキスト、基準点、基準位置を作成

CapA = (0,0)
capText = Text["<字幕にしたい文字列>", CapA]

 

②点capPを作成

点capPは、字幕を置きたい場所に応じて、以下のように定義する*1

中段中央に作成したい場合

Midpoint[Corner[1], Corner[3]] - (Distance[Corner[capText, 2], Corner[capText, 1]] / 2, Distance[Corner[capText, 4], Corner[capText, 1]] / 2) + Vector[Corner[capText, 1], CapA]

下段左に作成したい場合

InternalCorner[1] + Vector[Corner[capText, 1], CapA]

下段中央に作成したい場合

Midpoint[InternalCorner[1], InternalCorner[2]] - (Distance[Corner[capText, 2], Corner[capText, 1]] / 2, 0) + Vector[Corner[capText, 1], CapA]

下段右に作成したい場合

InternalCorner[2] - (Distance[Corner[capText, 2], Corner[capText, 1]], 0) + Vector[Corner[capText, 1], CapA]

中段右に作成したい場合

Midpoint[InternalCorner[2], InternalCorner[3]] - (Distance[Corner[capText, 2], Corner[capText, 1]], Distance[Corner[capText, 4], Corner[capText, 1]] / 2) + Vector[Corner[capText, 1], CapA]

上段右に作成したい場合

InternalCorner[3] - (Distance[Corner[capText, 2], Corner[capText, 1]], Distance[Corner[capText, 4], Corner[capText, 1]]) + Vector[Corner[capText, 1], CapA]

上段中央に作成したい場合

Midpoint[InternalCorner[3], InternalCorner[4]] - (Distance[Corner[capText, 2], Corner[capText, 1]] / 2, Distance[Corner[capText, 4], Corner[capText, 1]]) + Vector[Corner[capText, 1], CapA]

上段左に作成したい場合

InternalCorner[4] - (0, Distance[Corner[capText, 4], Corner[capText, 1]]) + Vector[Corner[capText, 1], CapA]

中段左に作成したい場合

Midpoint[InternalCorner[1], InternalCorner[4]] - (0, Distance[Corner[capText, 4], Corner[capText, 1]] / 2) + Vector[Corner[capText, 1], CapA]

 

③フレームcapFrameを作成

capFrame = Polygon[(x(Corner[1]), y(Corner[capText, 1])), (x(Corner[2]), y(Corner[capText, 2])), (x(Corner[2]), y(Corner[capText, 3])), (x(Corner[1]), y(Corner[capText, 4]))]

 

④できあがった点capPのOn Update スクリプト

UpdateConstruction[]
SetValue[CapA,Translate[CapA,(10,10)]]
SetValue[CapA,Translate[CapA,(-10,-10)]]
SetValue[CapA,capP]

 

⑤整形

capA, capPを非表示にする。

capFrameの色、透明度、レイヤーを調節する。

 

応用例

クリックしたオブジェクトの定義を字幕で表示する。 

*1:字幕の位置を、変数に依存させることも可能である。変数capNumの値と位置を、0(中段中央)、1(下段左)、1.5(下段中央)、2(下段右)、2.5(中段右)、3(上段右)、3.5(上段中央)、4(上段左)、4.5(中段左)というように関連づけるためには、capPの定義を、以下のように定義する。

If[If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 0 ∨ If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 0.5, Midpoint[Corner[1], Corner[3]] - (Distance[Corner[capText, 2], Corner[capText, 1]] / 2, Distance[Corner[capText, 4], Corner[capText, 1]] / 2) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 1, InternalCorner[1] + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 1.5, Midpoint[InternalCorner[1], InternalCorner[2]] - (Distance[Corner[capText, 2], Corner[capText, 1]] / 2, 0) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 2, InternalCorner[2] - (Distance[Corner[capText, 2], Corner[capText, 1]], 0) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 2.5, Midpoint[InternalCorner[2], InternalCorner[3]] - (Distance[Corner[capText, 2], Corner[capText, 1]], Distance[Corner[capText, 4], Corner[capText, 1]] / 2) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 3, InternalCorner[3] - (Distance[Corner[capText, 2], Corner[capText, 1]], Distance[Corner[capText, 4], Corner[capText, 1]]) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 3.5, Midpoint[InternalCorner[3], InternalCorner[4]] - (Distance[Corner[capText, 2], Corner[capText, 1]] / 2, Distance[Corner[capText, 4], Corner[capText, 1]]) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 4, InternalCorner[4] - (0, Distance[Corner[capText, 4], Corner[capText, 1]]) + Vector[Corner[capText, 1], CapA], If[0 ≤ capNum < 5, floor(2capNum) / 2, 0] ≟ 4.5, Midpoint[InternalCorner[1], InternalCorner[4]] - (0, Distance[Corner[capText, 4], Corner[capText, 1]] / 2) + Vector[Corner[capText, 1], CapA]]