前回同様、灘中の問題を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^2
0.643501 - 20 + 7.07107^2
0.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}$とわかる。
コメント