ここでは、自由な点オブジェクトAを、画面上を自由に泳がせるための方法を説明する。
function letPointSwim(pointName) {
var isexist = ggbApplet.exists(pointName);
if (!isexist) {
return;
}
ggbApplet.evalCommand('sliderOf' + pointName + ' = Slider( 0, 1, 0.001, 3, 200, false, true, true, false )');
ggbApplet.evalCommand('StartOf' + pointName + '=CopyFreeObject((x(' + pointName + '),y(' + pointName + ')))');
ggbApplet.evalCommand('MidOf' + pointName + '=CopyFreeObject((RandomBetween(10*ceil(x(Corner(1))),10*floor(x(Corner(2))))/10,RandomBetween(10*ceil(y(Corner(1))),10*floor(y(Corner(3))))/10))');
ggbApplet.evalCommand('GoalOf' + pointName + '=CopyFreeObject((RandomBetween(10*ceil(x(Corner(1))),10*floor(x(Corner(2))))/10,RandomBetween(10*ceil(y(Corner(1))),10*floor(y(Corner(3))))/10))');
ggbApplet.evalCommand('curveOf' + pointName + '=Spline({StartOf' + pointName + ', MidOf' + pointName + ', GoalOf' + pointName + '}, 3)');
ggbApplet.evalCommand('onCurvePointOf' + pointName + ' = Point(curveOf' + pointName + ', sliderOf' + pointName + ')');
ggbApplet.setAuxiliary('StartOf' + pointName, true);
ggbApplet.setAuxiliary('MidOf' + pointName, true);
ggbApplet.setAuxiliary('GoalOf' + pointName, true);
ggbApplet.setAuxiliary('curveOf' + pointName, true);
ggbApplet.setAuxiliary('onCurvePointOf' + pointName, true);
ggbApplet.setVisible('sliderOf' + pointName, false);
ggbApplet.setVisible('StartOf' + pointName, false);
ggbApplet.setVisible('MidOf' + pointName, false);
ggbApplet.setVisible('GoalOf' + pointName, false);
ggbApplet.setVisible('curveOf' + pointName, false);
ggbApplet.setVisible('onCurvePointOf' + pointName, false);
setGgbScript('sliderOf' + pointName, 'udt', 'If[sliderOf' + pointName + '>0.8,Execute[{"SetValue[StartOf' + pointName + ',onCurvePointOf' + pointName + ']","SetValue[MidOf' + pointName + ',GoalOf' + pointName + ']","SetValue[GoalOf' + pointName + ',(RandomBetween(10*ceil(x(Corner(1))),10*floor(x(Corner(2))))/10,RandomBetween(10*ceil(y(Corner(1))),10*floor(y(Corner(3))))/10)]"}]]
If[sliderOf' + pointName + '>0.8,SetValue[sliderOf' + pointName + ',0]]
UpdateConstruction[]
SetValue[' + pointName + ',onCurvePointOf' + pointName + ']');
}
function setGgbScript(objName, handler, script) {
var isexist = ggbApplet.exists(objName);
if (isexist) {
var objType = ggbApplet.getObjectType(objName);
var onwhat = (handler == 'click') ? 'val' : 'onUpdate';
var xmlText = '<element type=\"' + objType + '\" label=\"' + objName + '\"><ggbscript ' + onwhat + '=\"' + script + '\"/></element>';
ggbApplet.evalXML(xmlText);
}
}
ステップ2:ボタン等のオブジェクトを作成し、On Click スクリプトに、以下のJavaScriptを記述する
letPointSwim('A');
ステップ3:作成されたスライダーオブジェクトのアニメーションを開始する
以上です。
使用例
https://www.geogebra.org/m/pbntx9xk