Geogebra上のプログラム JavaScript の簡単な使い方

 Geogebraで教科書の例題をすべて解いていた時,プログラミングが必要になったら,Pythonを使ったものを紹介していたのだが,Geogebraに実装されているJavaScriptでも結構使えることがわかったので,参考にお知らせしよう。
 整数論から「2元1次不定方程式(ディオファントス方程式)の整数解」と「2元2次不定方程式の整数解」

2元1次不定方程式(ディオファントス方程式)の整数解

a,b に値を入力すると,直線 ax+by=1 を図示するのはいいとして,これの上の格子点を示すもの。
つまり,特殊解(赤丸)をプログラムで計算してそれを使って点列を図示するものです。
グローバルジャバスクリプトで関数を作って(math.jsにはこの関数があるのだが,Geogebraからの使い方が分からないので,まあ自分で作ってと)

function invmod(a, b) {
for (i = 1; i < b; i++) {
if (a * i % b == 1) break;
}
return (i);
}

変数宣言は無視しても,希望通り動いたのでこれでいいとして。
ボタンのクリックしてのJavaScriptに

a_1 = ggbApplet.getValue("a"); 
b_1 = ggbApplet.getValue("b");
c_1 = invmod(a_1, b_1);
d_1 = (1 - a_1 * c_1) / b_1;
ggbApplet.setValue("c", c_1);
ggbApplet.setValue("d", d_1);

こんなふうで動きました。
JSは大文字小文字区別します。
JavaScriptがGeogebraScriptに変わったりとか,ちょっと慣れるまでエラー頻発でしたけど。
点列はGeogebraで作ってます。

2元2次不定方程式の整数解

上と同様に,まずグローバルで

function divs(a, b, c) {
allay = [];
for (i = -a * b + c; i <= a * b - c; i++) {
if ((a * b - c) % i == 0) allay.push(i);
}
return allay;
}

ボタン格子点のクリックしてで

a_1 = ggbApplet.getValue("a"); 
b_1 = ggbApplet.getValue("b");
c_1 = ggbApplet.getValue("c");
l = divs(a_1, b_1, c_1);
for (i = 0; i <= l.length - 1; i++) {
ggbApplet.setListValue("list", i + 1, l[i] - b_1);
}

リストも大丈夫でした,と言いたいところですが,初期化だけJavaScriptがわからず,別のボタンでGeogebraScriptでつくってます。(格好悪い,誰か教えて)

参考に見なければならないページは,ここです。
https://wiki.geogebra.org/en/Reference:GeoGebra_Apps_API#General_methods


2元2次不定方程式の整数解については,JSを使わなくても
DivisorsListを使えばいいし,楕円型についても作ってみた。 inserted by FC2 system