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を使えばいいし,楕円型についても作ってみた。