(web版GeoGebra限定)スライダーの情報を取得するJavaScript関数
※ローカル版GeoGebraでは機能しません。
戻り値のプロパティ名は、以下のとおりである。startX, startY, endX, endY以外は、スライダーのxml情報中、sliderタグの属性から取得している。
↑スライダーを画面固定した場合。
↑スライダーを画面固定しない場合。absoluteScreenLocationプロパティが定義されていない点が、画面固定した場合との違いである。
使用例
スライダーa、自由な点オブジェクトStart, Goal, 自由な数値オブジェクト(最小値・最大値の限定無し)min_a, max_aを作成する。
また、点Pを、以下の定義で作成する。
P = Dilate(Goal, (a - min_a) / (max_a - min_a), Start)
グローバル欄に、上記関数を記述する。
aのOn Update ハンドラに、以下を記述する。
すると、aを更新すると、Start, Goalがaのスライダーの端点に移動し、min_a, max_aには、それぞれaのスライダーの最小値・最大値が記録される。
点Pは、aのスライダーの点(ドラッグできる部分)に揃う。
サンプル
直線を、楕円の接線に吸い付かせる
課題
自由な点オブジェクトA,B,C,D,E および
楕円c=Ellipse(A, B, C)と、直線f=Line(D, E)がある。
下図のように、直線を動かして、楕円に近づけていって、直線が楕円に接する位置付近に来たときに、接線に吸い付くような挙動を実現するには、どうすればよいか。
解答例
①Dを動かしたときの処理
DのOn Update スクリプトとして、以下を記述する。
UpdateConstruction()
If(Distance(D,ClosestPoint({Tangent(f, c)}, D))<0.2,SetValue(D,ClosestPoint({Tangent(E, c)}, D)))
②Eを動かしたときの処理
EのOn Update スクリプトとして、以下を記述する。
UpdateConstruction()
If(Distance(E,ClosestPoint({Tangent(f, c)}, E))<0.2,SetValue(E,ClosestPoint({Tangent(D, c)}, E)))
③直線を動かしたときの処理
fを動かすと、同時にE,Fも動くので、上記E,FのOn Update スクリプトが発動してしまう。これは、直線をドラッグ(つまり平行移動)して、傾きを変えずに楕円に外接させる挙動を実現するうえでの障害になる。そこで、fのOn Update ハンドラにスクリプトを記述するのではなく、
g = CopyFreeObject(f)
で、自由な直線オブジェクトgを作成しておき、gに適宜On Update スクリプトを記述していく(fは非表示にしておく)ことにする。
gのOn Update スクリプトとして、以下を記述する。
Execute({"SetValue(D,ClosestPoint(g,D))","SetValue(E,ClosestPoint(g,E))"})
UpdateConstruction()
If(Distance(D,ClosestPoint({Tangent(f, c)}, D))<0.2,Execute({"SetValue(g,Line(ClosestPoint({Tangent(f, c)}, D),g))","SetValue(D,ClosestPoint(g,D))","SetValue(E,ClosestPoint(g,E))"}))
1行目:fをgに揃える。なお、これによってD,E,fの状態が更新されても、D,E,fのOn Updateスクリプトは発動しない。これは、On Updateスクリプトによって更新されたオブジェクトのOn Updateスクリプトは発動しない、というGeoGebraの仕様による。
2行目:1行目を適用した後の状態を前提に、次以降の行を記述するための処理。
3行目:吸い付き処理。
fのOn Update スクリプトとして、以下を記述する。
SetValue(g,f)
サンプル
(覚書)wordフィールド
フィールドの作成:command + fn + F9
フィールドの表示・非表示:option + fn + F9
フィールドの更新:Shift + option + command + U または fn + F9
現在時刻
2020年10月10日23時27分56秒
{ DATE ¥@ "yyyy年M月d日HH時mm分ss秒" }
"yyyy":4桁西暦(2020)
"yy":2桁西暦(20)
"ge":年号アルファベット+年(R2)
"ggge":年号漢字+年(令和2)
"M":月※パディングなし(10, 4)
"MM":月※2桁ゼロパディング(10, 04)
"H":24時間表記
"h":12時間表記
"am/pm":AMまたはPM
"AMPM":午前または午後
参考
http://office-qa.com/Word/wd626.htm