うしブログ

うしブログ

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

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

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

(調査中)JavaScript api とユーザー操作位置のピクセル情報の取得

(本記事は、一般向けの解説ではなく、調査用の記事です。)

m(ワークシート)

https://www.geogebra.org/m/n2cvecxm

 

iFrame(フレーム埋め込み)

https://www.geogebra.org/material/iframe/id/n2cvecxm/width/1467/height/846/border/888888/sfsb/true/smb/false/stb/false/stbh/false/ai/false/asb/false/sri/false/rc/false/ld/false/sdz/false/ctl/false

 

 

classic(webアプリ)

https://www.geogebra.org/classic/n2cvecxm

 

matreial/edit(編集画面)

https://www.geogebra.org/material/edit/id/n2cvecxm

 

本ブログ埋め込み

 

 

api一覧

https://wiki.geogebra.org/en/Reference:GeoGebra_Apps_API

ggbApplet.registerClientListener(String JSFunctionName);

 

 

辺の長さを指定してn角形を描画する(n>=3対応)

 

辺の長さを指定して、多角形を描画します。頂点を動かせます。

 

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;

    //既存のPを削除
    deleteExistingObj('P', 'point');

    //始点P0=(0,0)をフリーで作成
    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) + ']]');
    }
}

//headNameを頭文字にもつ特定のタイプのオブジェクトを全て削除する。
function deleteExistingObj(headName, objType) {
    var targets = getExistingObjIndex(headName, objType);
    for (var k = 0; k < targets.length; k++) {
        ggbApplet.deleteObject(headName + targets[k]);
    }
}

//headNameを頭文字にもつ特定のタイプのオブジェクトname1, name3, name4が存在しているならば、配列[1,3,4]を返す。
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;
}

//headNameを頭文字にもつ特定のタイプのオブジェクトのラベルを「値」にする。
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);
    }
}

オリジナルツール「Triangle」

www.geogebra.org

 

3辺の長さを指定して、三角形を作成します。構文は、Triangle[<頂点>, <辺長1>, <辺長2>, <辺長3>]です。

 

作成された三角形をドラッグすると、平行移動できます。作成された頂点をドラッグすると、回転移動できます。

f:id:usiblog:20200820104230g:plain

 

(参考)

Triangle[A, a, b, c]は、以下のオブジェクトを返します。

B = Point(Circle(A, a))

C = Intersect(Semicircle(Dilate(A, b / Distance(A, B), B), Dilate(A, (-b) / Distance(A, B), B)), Semicircle(Dilate(B, (-c) / Distance(A, B), A), Dilate(B, c / Distance(A, B), A)), 1)

t1 = Polygon(A, B, C)

a_1 = Segment(B, C, t1)

b_1 = Segment(C, A, t1)

c_1 = Segment(A, B, t1)

 

(ついでに)

www.geogebra.org

4辺の長さを指定して、四角形を作成する、オリジナルツールです。 構文は、Quad[<頂点>, <辺長1>, <辺長2>, <辺長3>, <辺長4>]です。

f:id:usiblog:20200820135822g:plain