らんだむな記憶

blogというものを体験してみようか!的なー

ということで、Bézier曲線で囲まれた領域の面積とか

もう計算とかできる歳じゃないし! - らんだむな記憶Greenの公式と曲線の面積 - らんだむな記憶で準備したので。

とりあえず3次の場合だけ求めとく。
$P_j = (x_j, y_j),\ 0 \le j \le 3$をコントロールポイントとすると、$t \in [0,\ 1]$をパラメータとして、
\begin{align}
x(t) &= (1-t)^3 x_0 + 3t(1-t)^2 x_1 + 3t^2 (1-t) x_2 + t^3 x_3, \\\
y(t) &= (1-t)^3 y_0 + 3t(1-t)^2 y_1 + 3t^2 (1-t) y_2 + t^3 y_3
\end{align}
が曲線の式になる。これらが繋がったスプライン曲線で囲まれた領域$D$の面積を求めたい。

それぞれ導函数は、
\begin{align}
x^{\prime}(t) &= -3(1-t)^2 x_0 + 3(1-t)(1-3t) x_1 + 3t(2-3t) x_2 + 3t^2 x_3, \\\
y^{\prime}(t) &= -3(1-t)^2 y_0 + 3(1-t)(1-3t) y_1 + 3t(2-3t) y_2 + 3t^2 y_3
\end{align}
だと思う。計算は苦手だからどうだろう...。
$xdy - ydx$の対称性を考慮すると$x_j y_j$の項は消えて、
\begin{align}
xdy - ydx = x(t)y^{\prime}(t)dt - y(t)x^{\prime}(t)dt = \left[ \sum_{j \neq k} c_{jk}(t) x_jy_k \right] dt
\end{align}
の形で求まる。多分、整理すると以下。いよいよぁゃ$\iota$くなってきた...。
\begin{align}
\frac{1}{3}(xdy - ydx) = &[(1-t)^4 (x_0y_1 - x_1y_0) + 2t(1-t)^3 (x_0y_2 - x_2y_0) \\\
&+ t^2(1-t)^2 (x_0y_3 - x_3y_0) + 3t^2(1-t)^2 (x_1y_2 - x_2y_1) \\\
&+ 2t^3(1-t) (x_1y_3 - x_3y_1) + t^4 (x_2y_3 - x_3y_2)]dt
\end{align}
でいいのかな。
で係数について$\int_0^1 dt$したいんだけど、高校生でもないのでそんな計算できるわけがないので、Webの計算機を使う。
\begin{align}
\frac{1}{3} \int xdy - ydx &= \frac{1}{5} (x_0y_1 - x_1y_0) + \frac{1}{10} (x_0y_2 -x_2y_0) + \frac{1}{30} (x_0y_3 - x_3y_0) \\\
&+ \frac{1}{10} (x_1y_2 - x_2y_1) + \frac{1}{10} (x_1y_3 - x_3y_1) + \frac{1}{5} (x_2y_3 - x_3y_2)
\end{align}
らしい。
なので、面積の公式
\begin{align}
\int_{D} dx \land dy = \frac{1}{2}\oint_{\partial D} xdy - ydx = \sum_{\gamma\ :\ \mathrm{segment}} \frac{1}{2} \int_{\gamma} xdy - ydx
\end{align}
を思い出すと、

\begin{align}
\frac{1}{2} \int xdy - ydx &= \frac{3}{10} (x_0y_1 - x_1y_0) + \frac{3}{20} (x_0y_2 -x_2y_0) + \frac{1}{20} (x_0y_3 - x_3y_0) \\\
&+ \frac{3}{20} (x_1y_2 - x_2y_1) + \frac{3}{20} (x_1y_3 - x_3y_1) + \frac{3}{10} (x_2y_3 - x_3y_2)
\end{align}

がセグメント辺りの計算量になるので、これを全セグメントに渡って足し合わせたものが、スプライン曲線で囲まれる領域の面積、ということになる。
プログラムで求める場合には、20倍した面積を計算して最後に20で割るほうが丸め誤差も少ないだろうね。多分。

―――――・・・

あれ?これコントロールポイントの座標を調整したら面積が負にならね?おかしくね?www みたいな~。なので、$\int_{D} dx \land dy$とかいうウェッジ積(wedge product)とかいうの使ってへんてこな面積の書き方してるみたいなー。$dx \land dy$を向き付けられた面素とでも呼べば良いのか知らんが、輪郭を移動する時に左手の側に領域の内部が見えるような "反時計周り" が正の方向だとかかんとかで(複素線積分もそんな感じだね!)、そういう視点で領域を積分すると正の積分になって面積も正になるけど、輪郭が逆向き、つまり時計回りに見えるような場合は領域の裏側から見てることになって、その裏側から面積分することになると負の面積になるとからし~よ~とかとか...。しーらない。ちゃんと勉強してないしー。

そもそも面素って何だ?とか言いだすと厳しい。近代積分論が測度で語るなら、曲面(多様体?)の上の測度を考えるべきでは?とかなると「ほんと、なんでしょー??」みたいな。
石けん膜の数理解析―初学者のための幾何学的測度論 | フランク モーガン, 高村 博之, 本間 充, 儀我 美一, 寺島 学, 松沢 智子 | 本 | Amazon.co.jpのような「幾何学的測度論」が教えてくれるんじゃね?と思って流し読みしたけど、これ難しすぎてちんぷんかんぷん(汗)
しかし、作用素のスペクトルを求める場合にちろっとCoarea formula - Wikipedia, the free encyclopedia(和訳では「余面積公式」とか言うらしいがなんと意味不明な...)が必要なこともあったりで、本当は Geometric measure theory も知っとくべきなんだろうなぁぁぁ... とは...。