Mathematica、Wolfram言語

灘中入試をMathematicaで解く方法 -Part 1-2

入試問題

前回同様、灘中の問題をMathematicaで解いていきたいと思います。

今回は図形の面積をMathematicaで出力します。

大問8 難易度★★★★★

コードのヒント

コードのヒント

今回の順序はこんな感じです。

1.図形をMathematicaが出力する

2.面積を出力させる

コードの例

コードの例

RandomInstance[
GeometricScene[{{a, b, c, d, e, f,
o}, {r}}, {GeometricAssertion[{a, b, c, d}, "CyclicallyOrdered"],
CircleThrough[{a, b, c, d}, o, r], {Triangle[{a, e, b}],
PlanarAngle[{a, e, b}] == 90 [Degree]} , {Triangle[{d, e, c}],
PlanarAngle[{d, e, c}] == 90 [Degree]},
EuclideanDistance[a, e] == 4, EuclideanDistance[b, e] == 12,
EuclideanDistance[a, f] == 5, EuclideanDistance[f, o] == 5,
GeometricAssertion[{a, e, f, c}, "Collinear"]}]]

EuclideanDistance[o, a] /. %["Points"]

Area[Triangle[{o, a, b}]] /. %["Points"]

PlanarAngle[{c, o, d}] /. %["Points"]

Area[Triangle[{o, d, c}]] /. %["Points"]

7.07107^20.643501 - 20 + 7.07107^20.927295 - 20

画像をみるとわかりますが、Mathematicaでは円周率をΠで計算し、ラジアンは小数(四捨五入)で表示しているため、実際の答えとはすこし違います。

Mathematicaの答え 38.5398

模範解答の答え 38.5

コードの解説

コードの解説

図形の角度を求める場合はコードの冒頭にRandomInstance関数RandomInstance[]をつけます。これは「幾何シーンのような式のランダムな例を求める」という意味です。簡単にいうと、図形をコードで作っても、向きなどは指定しないので、向きは「ランダム」でよいということです。

その後、GeometricScene関数GeometricScene[]を使用します。図形に登場する記号を入力します。

ここから、図形の部分をコードにしていきます。

まず、円周上の点は、

GeometricAssertion関数を使用します。以下の例では点x,点y,点z,点wが円周上にあるということを表しています。

GeometricAssertion[{x, y, w, z}, "CyclicallyOrdered"], CircleThrough[{x, y, z, w}]

直角三角形を入力するときは、

Triangle[{a, e, b}],
PlanarAngle[{a, e, b}] == 90 [Degree]

とします。これは、点a,点e,点bが三角形の頂点であり、角AEBは90°であるということを表しています。コードの[Degree]の部分は°と入力しても構いません。逆に°こうする方が後から見た時に分かりやすいと思います。

次に、図形の長さについてです。

長さはEuclideanDistance関数、EuclideanDistance[] を使用します。例として、辺aeの長さが4の場合は、

EuclideanDistance[a, e] == 4

このようにコードを書きます。すごく単純だと思います。これで図形のコードは終わりです。あとは面積を求めるだけ!!!

三角形oabの面積を求める方法

Area[Triangle[{o, a, b}]]

辺oaの距離を調べる方法

EuclideanDistance[o, a] /. %["Points"]

角codを求める方法

PlanarAngle[{c, o, d}] /. %["Points"]

大問9 難易度★★★★★

コードのヒント

コードのヒント

大問8ができると簡単にコードを書けると思います。

mathematicaは計算結果が小数になりますが、問題によっては分数にする必要があることがあります。その場合は計算結果にRationalize関数、Rationalize[]を使用します。それがめんどくさい方はコードの後ろに//Pとすればよいでしょう。

コードの例

コードの例

RandomInstance[
GeometricScene[{a, b, c, p}, {Triangle[{a, b, c}],
PlanarAngle[{a, b, c}] == 60 [Degree],
PlanarAngle[{a, c, b}] == 60 [Degree],
Area[Triangle[{a, b, c}]] == 1, {Triangle[{a, p, b}],
PlanarAngle[{a, p, b}] == 120 [Degree]},
EuclideanDistance[p, b] ==
EuclideanDistance[p, a]*2, {Triangle[{a, p, c}]}}]]

cm = Area[Triangle[{c, a, p}]] /. %["Points"]

Rationalize[cm]

よって、この問題の答えは$\frac{1}{7}$とわかる。

コメント

タイトルとURLをコピーしました