複天一流:どんな手を使ってでも問題解決を図るブログ

宮本武蔵の五輪書の教えに従い、どんな手を使ってでも問題解決を図るブログです(特に、科学、数学、工学の問題についてですが)

東京大学2023数学[3] : svgを使った図形描画

久しぶりの新しい問題

大問2(1)がようやく片付いたので、久しぶりに新しい問題に取り組むことにしよう。

東京大学2023数学 第3問

代数幾何」という分類になるのであろうか?それとも「基礎解析」と呼ぶべきだろうか? 要は、二次曲線(円錐曲線のうち、円および放物線)の問題を幾何学的なアプローチで考えてみよう、という問題である。

実は、今回の問題を解くにあたり大きな野望がひとつあるのである。それはsvgを使った図形表現を用いて問題を分析したい、という野望である。つまり、放物線や円といった図形をsvgを使って描画してみたいのだ。

svgとはなにか?

Scalable Vector Graphicsの省略で、xmlベースのマークアップ言語である。htmlの中で利用でき、webブラウザなどで描画させることができる。いわば、図形生成のための「プログラミング言語」のようなものである。

プログラミング言語といっても、マークアップ系なのでhtmlによく似た感じであり、「言語」というよりは「指示文書」みたいな感じである。対応するアプリケーションは少なく、せっかく作った図形のsvgファイルはacrobat readerやmacOSpreviewなどでは開くことはできない。基本的にはブラウザで閲覧すべき「ファイル」なのである。しかし裏技も若干存在する。例えば、gimpで開いてjpegpngに変換することは(試してみたら)可能であった。また、Imagmagickでも認識できた。たとえば、

convert circle.svg circle.png

とすれば、ビットマップ画像系のファイルに変換できる。

svgの技能があれば、図形を作図したいと思ったとき、パワーポイントなどをつかって「お絵かき」するのではなく、svgのコマンドを書き連ねた「プログラム」(というかsvg文書)をエディターで作成することができる。できたsvgファイルは、Imagemagickgimpで好みの画像ファイルに変換することもできる。

興味深いことに、hatenaブログはsvgを受けつける。つまり、直接コマンドを書いて図形を描画させることができる。たとえば、灰色で塗りつぶした円を書いてみよう。htmlモード、あるいはmarkdownモードにしてから、直接次のコマンドを書く。

<svg version="1.1" id="svg1" width="90%" height="70%" xmlns="http://www.w3.org/2000/svg">
        <circle r="20%" cx="45%" cy="50%" id="c0" stroke="#fff" fill="#ccc"/>
 </svg>

そうすると、下のような図形が出てくる。

一方で、このコマンドをエディタで書いてファイルとして保存し、Imagemagickpngに変換してから、hatenaに画像して貼り付けてもいい。

svgからpngにconvertして作った「画像」

注意点は、ファイルで定義するときには、widthとheightの値をブラウザサイズの相対値(%)ではなく、絶対値(px)に書き換える必要がある。

<svg version="1.1" id="svg1" width="250" height="250" xmlns="http://www.w3.org/2000/svg">
        <circle r="20%" cx="45%" cy="50%" id="c0" stroke="#fff" fill="#ccc"/>
 </svg>

このsvgを用いて、まずは問題3で必要となる放物線と円、および座標軸を描画してみたい。

おまけ(というか練習)

<svg version="1.1" id="svg2" width="100" height="75" xmlns="http://www.w3.org/2000/svg">
   <polygon points="0,0 50,0 50,50 0,50 25,25 " />
</svg>

(つづく)