センター試験・数学IA 第3問

twitterのTLで今年のセンター試験・数学IAが難しくなってる,傾向が今までと違う,等々あったので,検索して問題をDLしてみた。いままでのセンターの問題とかほとんど見たことないので,どこがどう違うのかは分からないものの,第3問の幾何がちょっと面白そうだったので,図を描いてみた。

2013センター試験・数学IA第3問(全部入り)

図が描いてあれば易しい問題だと思う。文章をちゃんと読んで,正しい図を描くことが存外難しいということなのであろう。

$\angle PAO=\theta$ とおけば,$\tan\theta=\frac{1}{3}$であるから,$\tan 2\theta=\frac{3}{4}$ となる。よって,三角形ABCは3辺の長さの比が$3:4:5$の直角三角形である。$AB=6$であるから,$AC=\frac{24}{5}$ となる。

三角形ABCの内接円の半径$r$は,この場合は直角三角形であるから,次のように相似を利用して簡単に求められる。
\[ AN:NC=AN:NQ=AD:DP=3:1 \]
であるから,
\[ r=\frac{1}{4}AC=\frac{6}{5} \]
これから,三角形ADPと三角形ANQの相似比は$5:6$と分かるから,
\[ PQ=\frac{1}{5}AP=\frac{\sqrt{10}}{5} \]

なお,図版は asymptote で描いた。備忘録的にソースを書いておく。

import fontsize;

defaultpen(fontsize(11));
dotfactor=6;
//pen dashed=linetype("6 6");
// pen dashed=linetype("3 3");
pen dashed=linetype("4 4");
pen thick=linewidth(0.6bp); // 太線用のペンを定義する。
pen hairline=linewidth(0.3pt);

defaultpen(linewidth(0.4bp)); // 線の太さを0.4ポイントに設定

// usepackage("amsmath");
usepackage("MinionPro");

import geometry;

/* 2点A, Bを結ぶ弧 */
path ConnectTwo(pair A, pair B, real OffSet) {
  pair M=(A+B)/2+OffSet*unit(B-A)*I;
  return A..M..B;
}


size(8cm,0);

point pO=(0,0), pP=(0,1);
circle cO=circle(pO,3), cP=circle(pP,1);

line T1=tangent(cP,pO-pP);
point[] pAB=intersectionpoints(T1,cO);
point pA=pAB[0], pB=pAB[1];

line tgs[]=tangents(cP,pA);
line T2=tgs[1];
point pD=intersectionpoints(T2,cP)[0];
point pC=intersectionpoints(T2,cO)[1];

point pE=2*pO-pC;

circle icABC=incircle(pA,pB,pC);
circle icCEA=incircle(pC,pE,pA);
point pQ=icABC.C, pR=icCEA.C;

point pT1=intersectionpoints(icABC,pA--pC)[0];
point pT2=intersectionpoints(icABC,pB--pC)[0];

point pM=intersectionpoints(pA--pP,pO--pD)[0];


real dist=0.15;
draw(Label(scale(0.9)*"\kern -0.5em\raise 1ex\hbox{$\frac{24}{5}-r$}", align=Center,filltype=UnFill), ConnectTwo(pA,pT1,3.7dist), hairline+dashed);

draw(Label(scale(0.9)*"$3$", align=Center,filltype=UnFill), ConnectTwo(pA,pD,1.5dist), hairline+dashed);
draw(Label(scale(0.9)*"$3$", align=Center,filltype=UnFill), ConnectTwo(pA,pO,-1.2dist), hairline+dashed);
draw(Label(scale(0.9)*"$3$", align=Center,filltype=UnFill), ConnectTwo(pO,pB,-1.2dist), hairline+dashed);
draw(Label(scale(0.9)*"$1$", align=Center,filltype=UnFill), ConnectTwo(pD,pP,dist), hairline+dashed);
draw(Label(scale(0.9)*"$1$", align=Center,filltype=UnFill), ConnectTwo(pO,pP,-dist), hairline+dashed);
draw(Label(scale(0.9)*"$r$", align=Center,filltype=UnFill), ConnectTwo(pT1,pQ,dist), hairline+dashed);
draw(Label(scale(0.9)*"$r$", align=Center,filltype=UnFill), ConnectTwo(pT1,pC,dist), hairline+dashed);


draw(cO);
draw(cP);
dot("A",pA, dir(pO--pA));
dot("B",pB,dir(pO--pB));
dot("O",pO,dir(pD--pP));
dot("D",pD,0.7dir(pQ--pD));
dot("C",pC,dir(pO--pC));
dot("P",pP,dir(pO--pQ));
dot("E",pE,dir(pO--pE));
dot("Q",pQ,dir(pP--pO));
dot("R",pR,dir(pP--pO));
dot("N",pT1,dir(pQ--pT1));
dot(pT2);

draw(pP--pO);
draw(pP--pD);
draw(pA--pB);
draw(pA--pC--pB);
draw(pC--pE--pA);
draw(icABC);
draw(icCEA);
draw(pQ--pT1);
draw(pQ--pT2);

draw(pO--pD,dashed);
draw(pA--pQ,dashed);

dot("M",pM,N);

markrightangle(pP,pO,pA,1.5mm);
markrightangle(pA,pD,pP,1.5mm);
markrightangle(pA,pC,pB,1.5mm);
markrightangle(pE,pA,pC,1.5mm);
markrightangle(pA,pM,pO,1.5mm);
markrightangle(pA,pT1,pQ,1.5mm);
markrightangle(pC,pT2,pQ,1.5mm);

markangle(scale(0.9)*Label("$\theta$"),radius=8mm,n=2,space=0.6mm, pO,pA,pP);
markangle(scale(0.9)*Label("$\theta$"),radius=8mm,n=2,space=0.6mm, pP,pA,pC);

addMargins(2mm,2mm);

Mac OSX Lion上でAsymptote2.16をビルドした

asymptoteのバージョン2.13を使っていたが,3次元パッケージでラベルが切れてしまうバグ(?多分)に遭遇したので,最新版にアップすることにした。以前はLion上ではコンパイル出来なかったが,対応が進んでいるらしく,今回は上手く行った。コンパイラーもgcc-4.2に変更することなく,デフォルトのllvm-gccのままで問題なかった。readlineだけは相変わらずで,自分で指定しなくてはいけない模様。以下,メモ。

例によって,GNU readlineは /usr/local 以下にインストールしてあるとする。asymptote 2.16 のソースを本家からダウンロードして解凍。Boehm GCの最新版は gc-7.2b だが,以前のような修正は不要で,ダウンロードしたものを解凍することなく asymptote 2.16 のソース・ディレクトリーに放り込むだけでよいようだ。そして,configureのときに,GNU readline ライブラリーを読み込むように指定する。

./configure LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"

あとは make して make install (うちの場合は,諸般の事情で sudo make install) すればよい。うちの環境では,最後でGhostscriptがエラーを吐いてしまったが,これは付属文書を生成するlatex処理の部分なので,asymptote本体はちゃんとインストールされていた。gsのエラーについては,これ以外にもあって,ちょっと困ってはいるのだが,とりあえず目的は果たしたので,今回はこれまでとしよう。

Twitter 2011-08-04 の記録

  • 08:30  3時半に寝たので,まだ眠い。目がしょぼしょぼするし,なんか痒い気もする。ともかく活動開始。
  • 13:14  asymptote2.13の円弧ルーチンの不具合は,geometry.asyが原因だった。SVNの最新版と差し替えることで解決。開発者の迅速な対応に感謝。 http://bit.ly/o1jdJv
  • 13:24  MBPでAsymptote2.13(パッチ済)をビルドしてPackageMaker.appでインストーラーを作り、それでインストール。MBAにも持っていってインストール。うーん、簡単だ。
  • 13:33  Flash外したら、Safariからmixiのビデオが再生されなくなった。ClickToPlugin Extensionでも対応できないフォーマットなのかな? YouTubeはOKだったんだけどな。
  • 15:52  RT @h_okumura: これ使えそう。Rubyとかで書いてもいいのかな RT @nishio: [Mac OS X] シェルスクリプトとかの CUI アプリケーションを Mac OS X 方式の .app にする方法 [簡単 5 ステップ] http://htn.t
  • 17:06  あわわ・・・。prefix=HOGEでasymptoteをmakeしたら、デフォルトのサーチパスがHOGE/share/asymptote/ になってしまった。サーチパスは変えずに暫定のインストール先だけ変更するにはどうしたら良いのかな。
  • 18:12  Asymptoteのパッケージの作り方。prefixは変えずに,make install DESTDIR=$HOME/hoge などとすれば,自分のホーム直下のhogeにインストールされる。あとはPackageMaker.appを使えばよい。やっと完成か。


Powered by twtr2src.

AsymptoteのMac用パッケージを作る(不完全版)

にわか勉強のメモ。

通常のインストールは出来るものとする。AsymptoteとBoehm-gcをダウンロードして、gcにパッチを当ててAsymptoteフォルダーに入れる作業は済んでいるものとする。また、GNU readlineもインストールしてあるものとする。通常は /usr/local 以下にインストールされるものをパッケージ化してみる。

ユーザーのホーム直下、つまり$HOME=/Users/hoge 直下に例えば temproot というフォルダーを作り、ここにインストールする。configureは普通。Snow Leopardでは、

./configure LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I/usr/local/include"

次は、make だが、これも普通に。最後に、make install とするところを、make install DESTDIR=$HOME/temproot とする。すると、自分のホーム直下の temproot に、つまり /Users/hoge/temproot にインストールされる。

次は、これをパッケージにするのだが、アップル純正の PackageMaker.app というアプリを使えば簡単に出来るようだ。これは、/Developer/Applications/Utilities/ にある。temproot にあるフォルダーを追加して名前を付けて Build すれば終了。今回は、Asymptote 1.99 をビルドしたので、名前は Asymptote199.pkg とした。

さて、これを別のマシンに持っていく。MacBook Air (mid 2011) に持って行き、Asymptote199.pkg を開くと、通常のインストーラーの画面になって、パスワード入力を求めれれ、ごく普通にインストールが完了する。

では、実験。ターミナルから asy と打ち込む。あれ? エラーで終了。どうも、readlineが読め込めないとかいう理由らしい。readlineだけはパッケージに入らなかったようだ。仕方ないですね。手動で、libreadline.6.0.dylib (これは今回のビルドに際して使ったバージョン) を、母艦から持ってきて、/usr/local/lib/ に放り込む。これで大丈夫かと思いきや、またもやエラー。アクセス権関係だろうとカンを働かせ、パミッションを666(誰でも読み書き可能)にしてみたら、無事に asy が起動した。

以上で、不完全ではあるが、ある程度のパッケージ化ができた。readlineも一緒に入れたいが、どうしたら良いのか分かんないので、今回はこれで満足することにした。まあ、ユーザーは自分一人なんだからいいか 😉 。

Carbon Emacs メモ

asymptoteの編集にはCarbon Emacs (Emacs22をMac OS Xに移植したもの) を使っているのだが、昨日、ちょっと困った事態になったので、解決策をメモ。

昨日、Asymptoteの最近版?である 2.12 をソースからコンパイルしたのだが、Carbon Emacsからコンパイルしようとすると、古いバージョンが起動してしまった。古いバージョンどころか、ログを見ると、TeXLive/2009/ 以下にあるasymptote1.88が起動している。これは、自分で以前にコンパイルしたものとも違う。

つらつら考えるに、TeXLive/2009 以下にあるasymptoteが先に認識されているからに違いなかった。つまり、パスの優先順位の問題だ。しかるに、ワタシの場合、怠けていて、.emacs すら作っていない。いったい何処にパスの設定があるのだろうか。

いろいろ調べて分かったこと。Carbon Emacs.app はアプリとは言いながら、実態はフォルダー。Finderから右クリックして、パッケージの内容を表示というのを選べば、アプリの内容をファインダー上で表示できる。Carbon Emacs.app/Contents/Resorces/site-lisp/ に、site-start.el というEmacs Lisp があるが、これが最初に読み込まれるようだ。中を見ると、

  (carbon-emacs-package-add-to-path
   '(
     "~/bin"          ; one's own
     "/usr/texbin"    ; TeX
     "/usr/local/bin"
     "/usr/X11R6/bin" ; xdvi
     "/usr/local/teTeX/bin/i386-apple-darwin-current" ; i-Installer (intel)
     "/usr/local/teTeX/bin/powerpc-apple-darwin-current" ; i-Installer (ppc)
     "/opt/local/bin" ; MacPorts
     "/sw/bin"        ; Fink
     ))

となっていて、2番目に /usr/texbin がロードパスに指定されていることが分かる。/usr/texbin は実際には /usr/local/texlive/2009/bin へのシンボリック・リンクなので、これで、TexLive 2009 のAsymptoteがロードされているのだった。

そこで、これを削除することで解決。ついでにいろいろ調べていたら、.emacs とかに、

(mac-key-mode 1)

と書けば、マック風のキーバインドになって、Command-Cでコピー、Command-Vでペーストとか出来ることを発見。まあ、これは慣れの問題だから、どっちでも良いのだが。

MacTeX導入 & Asymptoteでアニメーション

Asymptoteでアニメーション

AsymptoteでGIFアニメが作れるらしいので、少し実験。といっても、サンプルをダウンロードしてきてコンパイルしただけなのだが。しかし、animate.sty というLaTeX スタイルファイルを利用するものは、e-TeX 拡張された pdfTeX その他が必要らしく、日本語化されたpTeXではコンパイルできなかった。

しばし迷った末に決断 :mrgreen:MacTeXを一式ダウンロードした。これは最新のTeX Live 2009をMac OS X向けにビルドしたもので、普通のマックユーザーが簡単にインストールできるようなパッケージとなっている。実際には、/usr/local/texlive/2009/ 以下にどどっとファイル群が入るのだが、そこは知らなくても良いことになっている。その代わりと言ってはなんだが、一切合切が入っている為か、ダウンロードするファイルは1個で1.3Gバイト。ギガですよ、旦那 :mrgreen:

これでTeXを始める人はそれで良いのだが、ワタシの場合、既にpTeXを導入していて、しかも通常の/usr/local/tetex/ (だったっけ?)以下ではなく独自の場所にインストールしているから、以下の情報は大切。メモしておこう。

まず、/etc/path.d/TeX と /etc/manpath.d/TeX というファイルが書き込まれる。これで、PATHとMANPATHの末尾にMacTeXで使うディレクトリーが追加される。追加されるPATHは /usr/texbin なのだが、これは /usr/local/texlive/2009 へのシンボリック・リンクである。そして、システム環境設定に新たに追加された TeX Distribution から、どのTeXシステムを使うのかを選択できるようになっている。例えば、MacPortsで入れたものを選択すると、/usr/texbin のリンク先が /opt/local/bin になる(試してないけど多分・・・)とかいう仕組みのようだ。(一部未確認なので要注意) まあ、あらかたこんな感じになっている。

全部で1.3Gという大富豪的TeXパッケージなのだが、何とTeXShopやTeXWorksといった統合環境エディターや、LaTeXit、おまけに asymptote まで全部入っている。これに日本語化されたpTeXとUTF拡張のupTeX、さらにe-TeX拡張された upTeXが入っていれば、日本でも利用者がどっと増えるだろうに・・・。

ということで、とりあえず、自分でビルドしたものは一切使わずに、PATHの最初の項目を /usr/texbin にし、MacTeXのasyとpdflatexで、アニメーションGIFを作ってみた。(冒頭のGIF動画がそれ)

Flickr! サイトではJPEGになってしまって動かないのだが、最大サイズを選べば GIF のままで、ちゃんと動く。

しかし・・・、2つのTeXシステムを行き来するのは面倒ではある。毎回PATHを変えるのもなあ。何か良い方法はないものか。

Asymptoteの練習 No.0005 テオドロスの螺線

Spiral of Theodorus (テオドロスの螺線)


引き続き、繰り返し処理。テオドロスの螺線 (Spiral of Theodorus) を描いてみる。
三辺が$1$, $1$, $\sqrt2$の直角三角形から始めて、斜辺の上に高さ1の直角三角形を次から次へと作っていくことで、この図形は作られている。

伝説(?)によれば、テオドロスはルート2から始めて、自然数の平方根が整数になる場合を除いて無理数になることの証明をルート17まで行ったという。この螺線における直角三角形の斜辺がちょうど$\sqrt2$, $\sqrt3$, … , $\sqrt{17}$ となっていて、これ以上進めると三角形が重なってしまうので、ここで止めたのだろうという話を何処かで読んだ。

繰り返し以外のポイントとしては、線分$OP_{i}$を90度回転させて長さを1にしたものを線分$P_{i}P_{i+1}$とすることで、次の直角三角形を作るところ。AsymptoteはMetapostと同様に複素数としての演算が出来るが、それ以外にも、アフィン変換がサポートされている。今回は rotate という回転を行うオペレーターと、単位ベクトルを作る unit という関数を用いた。

/*
  Asymptoteの練習 No.0005
  繰り返し処理
  Spiral of Theodorus (テオドロスの螺線)
  t0005.asy
*/

size(6cm,0); // 出来上がりの図版のサイズを幅6センチに設定

int n=17;
pair pO=(0,0);
pair[] pA;

pA[1]=(1,0);

for (int i=1; i<=n-1; i+=1)
  {
    pA[i+1]=pA[i]+unit(rotate(90)*(pA[i]-pO));
  }

for (int i=2; i<=n; i+=1)
  {
    draw(pO--pA[i-1]--pA[i]--cycle);
    markrightangle(pO,pA[i-1],pA[i],1.5mm);
    dot(format("$\mathrm{P}_{%i}$",i), pA[i],dir(pO--pA[i]));
  }

dot("$\mathrm{P}_{1}$", pA[1], dir(pO--pA[1]));

ImageMagickのconvertでPDFをjpegに変換する

[ 備忘録 ] Asymptoteの出力をjpegにしようとしたが,何故か上手く出力されない。ということで,ImageMagickを用いてPDFからjpegを作るためのメモ。

convertを使う。density を200 x 200にして hoge.pdf から hoge.jpg を作るときは,ターミナルから,

convert -density 200x200 hoge.pdf hoge.jpg

とすればよい。

Asymptoteの練習 No.0004 正17角形を描く

正17角形

Asymptoteで繰り返し処理をしてみる。for 文の構文はC言語とほぼ同じ。繰り返しの変数は,その場で定義すればよい。ローカル変数ということなのだろう。簡単なところで正多角形を描いてみる。

/*
  Asymptoteの練習 No.0004
  繰り返し処理
  t0004.asy
*/

size(6cm,0); // 出来上がりの図版のサイズを幅6センチに設定

int N=17;
pair pO=(0,0);
pair[] pA;

for (int i=0; i<=N; i+=1)
  {
    pA[i]=(cos(2*i*pi/N),sin(2*i*pi/N));
  }

for (int i=0; i<=N-1; i+=1)
  {
    draw(pA[i]--pA[i+1]);
    draw(pO--pA[i]);
    dot(format("$\mathrm{P}_{%i}$",i), pA[i],dir(pO--pA[i]));
  }

以前 Metapost で同じようなことをしたことがあるが,頂点のラベル付けで添え字を自動で書き込むことが出来なかった。Asymptoteでは format 文が用意されているので,繰り返し処理の中で,変数 i を文字(数字)に書き下してからTeX側に送ることが簡単に出来るようだ。これは便利だ。

Asymptoteの練習 No.0003「外接する3円」

久しぶりに Asymptote によるお絵描きの練習。

Asymptoteの練習 No.0003

ホントはフォード・サークルを描きたかったのだが、まだ繰り返し処理などのプログラムを書けないので、2円と直線に外接する第3の円を描くことで満足することにした。円の中心は半径は事前に計算式を作って求めるようにする必要がある。しかし、計算自体はプログラムがやってくれるので、半径を変えたいときは、a, bを変えるだけで、あとのコードはそのままで構わない。

破線は dashed というペンを選べばよいのだが、標準のものは少し間延びしているように感じたので、少しだけ変更した。

geometryというモジュールをimportすれば、円と直線の交点、2円の交点をプログラムに求めさせることが出来る。これは、intersectionpoints という関数で成される。交点は2個あるため、結果は配列になる。

/*
  Asymptoteの練習 No.0003
  直線lに接し、互いに接する2円C1,C2に対して、この3つに接する円を描く。
  t0003.asy
*/

// usepackage("amsmath");
usepackage("MinionPro"); // 数式フォントをMinionProに設定

import fontsize; // font サイズ変更のため
import geometry; // 初等幾何用のモジュール

defaultpen(fontsize(11)); // フォントサイズを11ポイントに設定
defaultpen(linewidth(0.4pt)); // 線の太さを0.4ポイントに設定

dotfactor=6; // 黒丸のサイズは線の太さの6倍に設定
// pen dashed=linetype("6 6");
// pen dashed=linetype("3 3");
pen dashed=linetype("4 4"); // 破線の長さを少し変更する。

pen thick=linewidth(0.6pt); // 太線用のペンを定義する。


size(6cm,0); // 出来上がりの図版のサイズを幅6センチに設定
// unitsize(5mm);


/*
  最初に互いに外接する2円c1,c2の半径a,bを定める。3番目の円c3の半径cは
   1/sqrt(c)=1/sqrt(a)+1/sqrt(b)
  により計算される。
  3円の共通接線l上での接点P,Q,Rの座標をx1(=0), x2,x3とする。
  これらは、共通接線の長さ
   PQ=2sqrt(ab), PR=2sqrt(ac)
  により計算される。
 */
real a=3.7, b=5; // 互いに外接する2円の半径
real c=(a*b)/(sqrt(a)+sqrt(b))^2;

real x1, x2, x3; // 共通接線上での接点の位置
x1=0;
x2=2*sqrt(a*b);
x3=2*sqrt(a*c);

/*
  3円の中心A,B,Cの座標を設定する。
  点Aに対するpair(=point)としては、pAという記号を用いることにする。(pはpointの意味)
  次に、A,B,Cを中心とする半径a,b,cの円c1,c2,c3を作る。
 */
point pA=(x1,a), pB=(x2,b), pC=(x3,c);
circle c1=circle(pA,a), c2=circle(pB,b), c3=circle(pC,c);

/*
  接点P,Q,Rの座標と、共通接線の両端M,Nを設定する。
 */
point pP=(x1,0), pQ=(x2,0), pR=(x3,0), pM=(x1-a,0), pN=(x2+b,0);

/*
  2円の接点をいろんな形で求めてみる。
  segmentは線分を意味する。以下では、seg1は線分ABとなる。
  直線と円の交点は一般には2個になるので、intersectionpoints (複数形に注意) の
  値は配列になっている。最初に交点にアクセスするために [0] としている。
 */
segment seg1=segment(pA,pB);

point pT1=intersectionpoints(seg1,c1)[0];
point pT2=intersectionpoints(pA--pC,c1)[0];
point pT3=intersectionpoints(c2,c3)[0];

/*
  太めのペンで3つの円と共通接線を描く。
 */
draw(c1,thick);
draw(c2,thick);
draw(c3,thick);
draw(pM--pN,thick);

/*
  標準のペンで、中心を結ぶ線分などを波線で描く。
 */
draw(seg1,dashed);
draw(pA--pC,dashed);
draw(pB--pC,dashed);
draw(pA--pP,dashed);
draw(pB--pQ,dashed);
draw(pC--pR,dashed);

/*
  接点に直角マークを付ける。サイズは1.5mmと直接指定した。
  標準だと大きすぎた。標準を変更する方法があると良いのだが。
 */
markrightangle(pA,pP,pM,1.5mm);
markrightangle(pB,pQ,pM,1.5mm);
markrightangle(pC,pR,pM,1.5mm);

/*
  接点に位置にドット(黒丸)とラベルを描く。
  ドットのサイズは、linewidth*dotfactorになる。
  また、
    dot("P",pP,S,red+linewidth(0.8mm));
  のように、直接 linewidthや色を指定することも可能。
  ドットを白抜きにする方法を知りたい。
  ラベルに位置は、東西南北(EWSN)などで指定できる。
  東北(EN)や東北東(ENE)なども可能。
*/
dot("P",pP,S);
dot("Q",pQ,S);
dot("R",pR,S);
dot("$\mathrm{O}_1$",pA,N);
dot("$\mathrm{O}_2$",pB,N);
dot(pC);
dot(pT1);
dot(pT2);
dot(pT3);

label("$l$",pM,W);

addMargins(2mm,2mm);