function ggbOnInit() {
RegisterPointUpdateListener('stopMove');
shuffle();
}
function getInfo(activePointName) {
var allPointNameArr = ggbApplet.getAllObjectNames('point');
var activePointIndex = -1;
var noActivePointNameArr = [];
for (var k = 0; k < allPointNameArr.length; k++) {
if (allPointNameArr[k] == activePointName) {
activePointIndex = k;
} else {
noActivePointNameArr.push(allPointNameArr[k]);
}
}
var noActiveListForGGB = '{' + noActivePointNameArr.join(',') + '}'
var closestPointIndex = ggbApplet.getValue('IndexOf(ClosestPoint(' + noActiveListForGGB + ', ' + activePointName + '), ' + noActiveListForGGB + ')') - 1;
var closestPointName = noActivePointNameArr[closestPointIndex];
ggbApplet.setTextValue('ggbConsole', 'アクティブな点:' + activePointName + ', 最も近い点:' + closestPointName);
return ['' + activePointName, '' + closestPointName];
}
function RegisterPointUpdateListener(jsFunctionName) {
var allPointNameArr = ggbApplet.getAllObjectNames('point');
for (var k = 0; k < allPointNameArr.length; k++) {
ggbApplet.registerObjectUpdateListener(allPointNameArr[k], jsFunctionName);
}
}
function stopMove(activePointName) {
var info = getInfo(activePointName);
var P = info[0];
var C = info[1];
ggbApplet.evalCommand('If[Distance[' + P + ',' + C + ']<2*r||Length[{Intersect[Circle[' + P + ',r],i]}]>2,SelectObjects[]]');
}
function shuffle() {
var allPointNameArr = ggbApplet.getAllObjectNames('point');
for (var k = 0; k < allPointNameArr.length; k++) {
ggbApplet.evalCommand('SetValue[' + allPointNameArr[k] + ',(RandomBetween[-50,50]/10,RandomBetween[-50,50]/10)]');
}
}