辺の長さを指定して、多角形を描画します。頂点を動かせます。
ggbファイルのダウンロードはこちらから。
www.geogebra.org
(参考)グローバルJavaScript
function execute(listName) {
var lenArr = getArr(listName);
makePolygon(lenArr);
setExistingLabelToValue('p', 'segment');
}
function getArr(listName) {
var len = ggbApplet.getValue('Length(' + listName + ')');
var outputArr = [];
for (var k = 0; k < len; k++) {
outputArr[k] = ggbApplet.getListValue(listName, k + 1);
}
return outputArr;
}
function makePolygon(lenArr) {
var numberOfVertice = lenArr.length;
deleteExistingObj('P', 'point');
ggbApplet.evalCommand('P0=(0,0)');
ggbApplet.evalCommand('UpdateConstruction[]');
for (var k = 0; k < numberOfVertice - 2; k++) {
ggbApplet.evalCommand('P' + (k + 1) + ' = Point(Circle(P' + k + ', ' + lenArr[k] + '))');
}
ggbApplet.evalCommand('P' + (numberOfVertice - 1) + '=Intersect(Semicircle(Dilate(P0, ' + lenArr[numberOfVertice - 2] + ' / Distance(P0, P' + (numberOfVertice - 2) + '), P' + (numberOfVertice - 2) + '), Dilate(P0, (-' + lenArr[numberOfVertice - 2] + ') / Distance(P0, P' + (numberOfVertice - 2) + '), P' + (numberOfVertice - 2) + ')), Semicircle(Dilate(P' + (numberOfVertice - 2) + ', (-' + lenArr[numberOfVertice - 1] + ') / Distance(P0, P' + (numberOfVertice - 2) + '), P0), Dilate(P' + (numberOfVertice - 2) + ', ' + lenArr[numberOfVertice - 1] + ' / Distance(P0, P' + (numberOfVertice - 2) + '), P0)), 1)');
var argText = 'P0';
for (var k = 1; k < numberOfVertice; k++) {
argText = argText + ',P' + k;
}
ggbApplet.evalCommand('outputPolygon=Polygon[' + argText + ']');
for (var k = 0; k < numberOfVertice - 3; k++) {
ggbApplet.evalCommand('SetValue[P' + (k + 2) + ',Rotate[P' + k + ', -π *(' + numberOfVertice + '-2)/' + numberOfVertice + ',P' + (k + 1) + ']]');
}
}
function deleteExistingObj(headName, objType) {
var targets = getExistingObjIndex(headName, objType);
for (var k = 0; k < targets.length; k++) {
ggbApplet.deleteObject(headName + targets[k]);
}
}
function getExistingObjIndex(headName, objType) {
var allObjNames = ggbApplet.getAllObjectNames(objType);
var targets = allObjNames.filter(function(item) {
if (item.indexOf(headName) != -1) return true;
});
targets.map(function(value, index, array) {
array[index] = eval(value.substr(headName.length));
});
return targets;
}
function setExistingLabelToValue(headName, objType) {
var targets = getExistingObjIndex(headName, objType);
for (var k = 0; k < targets.length; k++) {
ggbApplet.setLabelVisible(headName + targets[k], true);
ggbApplet.setLabelStyle(headName + targets[k], 2);
}
}