12

曲線の面積を求める

632
0

Osgood曲線というものの面積を求めます。

Osgood曲線とは?

Osgood curveのwikipedia の Definition and propertiesにはこう書かれています。

A curve in the Euclidean plane is defined to be an Osgood curve when it is non-self-intersecting (that is, it is either a Jordan curve or a Jordan arc) and it has positive area.[1] More formally, it must have positive two-dimensional Lebesgue measure.

wikipedia  

日本語にするとこんな感じ

ユークリッド平面内の曲線がOsgood曲線であるとは、その曲線が自己交差しない(つまり、それがJordan曲線またはJordan弧である)かつ、正の面積を持つときに言います。より正式には、その曲線は正の2次元ルベーグ測度を持つ必要があります。

ということ。つまりは、「自己交差せずに正の二次元ルベーグ測度を持つ連続な曲線」なら何でもOsgood曲線と言ってもいいということなんですね。

なのでめちゃくちゃたくさんの種類があります。
よって面積は一意に定まりません。

画像の面積を求める

Osgood曲線の面積を求めるわけではなくて、画像の曲線の面積と、[0,1]からℝ²への関数としての表示を求めてくださいと言われたのでした。

画像はこれです。

一度mathlogに画像をアップロードして内部htmlからリンクを取得すれば、imgタグのsrcに入れると 図1 とかの文字なしの画像を埋め込めますね。

そして Osgood curveのwikipedia にある画像がこちら

By David Eppstein - Own work, CC0, Link

完全にこの画像ですね。
この画像の説明にはこう書かれています。

Example of an Osgood curve, constructed by recursively removing wedges from triangles. The wedge angles shrink exponentially, as does the fraction of area removed in each level, leaving nonzero area in the final curve.

訳すとこう

Osgood曲線の一例。これは、三角形からくさび形の部分を再帰的に取り除くことで構成される。このとき、くさびの角度は指数関数的に小さくなり、各段階で取り除かれる面積の割合も指数的に減少する。その結果、最終的に残る曲線は非ゼロの面積を持つ。

確かに、奥のほうは角度が狭くなっていますね。

...


指数関数的な減少なので、こういう風に定義するとどうでしょうか
θn=θean(a<0)
θnはくさび型の三角形の一番小さい角度(頂角と呼ぶことにする)とします。
あとは、最初の三角形の形を設定すればいいですね。
底辺は1、高さはbとしましょうか。
気持ち的にはこうです

なるほどね
ここで気づいたのですが、最初の三角形以外青い三角形は二等辺三角形とは言えないんですね。
なので取り除くくさびはくさびの頂角の二等分線が青い三角形の対辺の中点を通るようにします。

値を求める

青い部分の面積が欲しいです


CD=mとします。中線定理より、
a2+b2=2(AD2+m2)a2+b2=2AD2+2m212(a2+b2)AD2=m212(a2+b2)c24=m2122a2+2b2c2=m


ψ=ABCϕ=BDCとします。BDCの辺BDの高さや辺DBの長さを考えると
msin(ϕ)=asin(ψ)mcos(ϕ)=c2acos(ψ)
と分かるので、
sin(ϕ)=amsin(ψ)cos(ϕ)=c2mamcos(ψ)
となります。


ここでϕ+θ2sincosを求めます
sin(ϕ+θ2)=sin(ϕ)cos(θ2)+cos(ϕ)sin(θ2)=amsin(ψ)cos(θ2)+(c2mamcos(ψ))sin(θ2)=am(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2msin(θ2)cos(ϕ+θ2)=cos(ϕ)cos(θ2)sin(ϕ)sin(θ2)=(c2mamcos(ψ))cos(θ2)amsin(ψ)sin(θ2)=am(cos(ψ)cos(θ2)+sin(ψ)sin(θ2))+c2mcos(θ2)


ここで辺CFを底辺とみてCDFの高さを考えることで、
msin(θ2)=DFsin(θ2+ϕ)DF=sin(θ2)sin(θ2+ϕ)m=sin(θ2)am(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2msin(θ2)m=sin(θ2)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2
と求まります。


もう一個のDEabを入れ替えればいいので
DE=sin(θ2)b(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2
ここでψ=BACです。
(これψψに統一しといたほうがいいよな...)
と思ったので
bsin(ψ)=asin(ψ)bcos(ψ)=cacos(ψ)sin(ψ)=absin(ψ)cos(ψ)=cbabcos(ψ)
ということなので
DE=sin(θ2)b(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2=sin(θ2)b(absin(ψ)cos(θ2)cbsin(θ2)+abcos(ψ)sin(θ2))+c2sin(θ2)m2=sin(θ2)(asin(ψ)cos(θ2)csin(θ2)+acos(ψ)sin(θ2))+c2sin(θ2)m2=sin(θ2)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)m2
似てますね


右の三角形の面積は、
S22DFcS2=S2DFcS=S2Scsin(θ2)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2=S2Sm2sin(θ2)ac(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c22sin(θ2)=S2S4m2sin(θ2)4ac(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+2c2sin(θ2)


左は、
S22DEcS2=S2DEcS=S2Scsin(θ2)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)m2=S2Sm2sin(θ2)ac(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c22sin(θ2)=S2S4m2sin(θ2)4ac(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))2c2sin(θ2)
一応面積が出ましたが、再帰するには小さい三角形に対応するa,b,c,ψが必要です


再掲 再掲

で、必要なのは左の三角形に対するsin(ψ1),cos(ψ1),a1,b1,c1
右の三角形に対するsin(ψ2),cos(ψ2),a2,b2,c2です。
右の方は
sin(ψ1)=sin(FBC),cos(ψ2)=cos(FBC),c1=BC,a1=BF,b1=FC
左は
sin(ψ2)=sin(EAC),cos(ψ2)=cos(EAC),c2=AC,a2=AE,b2=EC
です。


右から行きましょうか
sin(FBC)=sin(ψ)cos(FBC)=cos(ψ)c1=aa1=c2DF=c2sin(θ2)sin(θ2+ϕ)m=c2sin(θ2)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2b1=CF
ここでCFですが、BCFの高さを考えることで、
CFsin(θ2+ϕ)=asin(ψ)CF=sin(ψ)sin(θ2+ϕ)a=amsin(ψ)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)
となります。再帰できます。


左の方は
bsin(EAC)=asin(ψ)sin(EAC)=absin(ψ)bcos(EAC)=cacos(ψ)cos(EAC)=cbabcos(ψ)c2=ba2=c2DE=c2m2sin(θ2)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)b2=CE
ここでCEですが、CEBの高さを考えることで、
CEsin(θ2+ϕ)=asin(ψ)CE=sin(ψ)sin(θ2+ϕ)a=amsin(ψ)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)
これで再帰が完全にできますね!




m=122a2+2b2c2

Sr=S2S4m2sin(θ2)4ac(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+2c2sin(θ2)sin(FBC)=sin(ψ)cos(FBC)=cos(ψ)c1=aa1=c2sin(θ2)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2b1=amsin(ψ)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)



Sl=S2S4m2sin(θ2)4ac(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))2c2sin(θ2)sin(EAC)=absin(ψ)cos(EAC)=cbabcos(ψ)c2=ba2=c2m2sin(θ2)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)b2=amsin(ψ)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)

一応Geogebraで書いていたサイトを保存しておきます。
https://www.geogebra.org/calculator/ekhrw5nf

プログラム

これで一仕事はしました。が、次も大きな仕事があります
プログラミングです。
ざっとこんな感じですね。
n回分割していくと三角形の数が2n個になるので頑張っても23回分割で、
ぱっと求めるには20回分割ぐらいしかできないです

結果

試しに正三角形から初めてθn=30°2nでやりました。
S1=0.2320508075688773166051925059656452240866723649140120384651322164958122962272924S2=0.1803675244988207080116317986079005515372398980584778518136842546569495933891843S3=0.1606451381723249784180454293218508497573398011502433311356028613314800011200362S4=0.1495657798725541834417913029772603360518663622406790293239079990976682629898696S5=0.144446433806644429774981083621989609918207657569345706608446486818457547591952S6=0.1417856486784250519311043457431398909101912772506910733312850802566257244276233S7=0.1404830359759840363598149406215973262038884311560136739522018694794239605574951S8=0.1398248686416135048358952007987669297157434819392934443954784015075960523603571S9=0.1394975405346236570452757536502778268355650061096257117693640874810374437428807S10=0.1393334390725284647816767670137192849909618333862113074073322582789174466860375S11=0.1392514983309392710364239425490532750011338173380931742657321001761999138197561S12=0.1392105004865535764817862659847070767135805264682918214464518690138055414890557S13=0.1391900084427522275467123933000508196607470979557750498244958938649765271133263S14=0.1391797607016276917917383600504124192969334826007596880575748498725357478167391S15=0.139174637261027686610631125949441059545463834609543048493345632209880660713084S16=0.139172075433242972452398956934843265279751122422067557919615567786770190240881S17=0.139170794546224235985555833286955821858953648479632395856782521274816008558424S18=0.1391701540959965541093110575100093972008509566265556245347663298658180414517524S19=0.1391698338725623297516474545430214228075061114283059920866537821645244915645523S20=0.1391696737604253148577043185571695189318978243911994721768108373160164444812696S21=0.1391695937044617836859217593254448159989315815107224467403278456559985397593117S22=0.139169553676453774053577638759258464184357762927205621269243512793344880440069S23=0.1391695336624563302583377476464015856711698900743038042294514659322444317394553
だいたい0.139169...という感じです。これ以上は何も言えませんね
他の場合も知りたい場合はその条件をコメントに書いてください。私が計算します。

関数

[0,1]からℝ²への関数としての表示を求めます。
といっても僕には具体的な閉じた表示は求められないので、構成の方法だけでも述べようかと思います。
要はt(0t1)を使ってこの曲線のパラメータ表示をしてということです。
これには各頂点の座標がいります。
再再掲 再再掲

各頂点の座標をA,B,Cとでも置きましょう。
DF=sin(θ2)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2DE=sin(θ2)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)m2
なので
F=D+DB2csin(θ2)a(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c2sin(θ2)m2=12(A+B)+12(BA)2sin(θ2)ac(sin(ψ)cos(θ2)cos(ψ)sin(θ2))+c22sin(θ2)m2E=D+DA2csin(θ2)a(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c2sin(θ2)m2=12(A+B)12(BA)2sin(θ2)ac(sin(ψ)cos(θ2)+cos(ψ)sin(θ2))c22sin(θ2)m2
という風にE,Fを求められます。
あとは、


Cl=FAl=CBl=B



Cr=EAr=CBr=A

という風に再帰してあげると、すべての頂点の座標が分かります。
全ての頂点の座標が分かったら、それらを順番に並べます。
並べ方なのですが、最初の三角形A1,B1,C1の組(A1,B1,C1)に数値の組(0,12,1)を持たせます。
次の三角形の座標二つを作る際、右の方の組(B1を持つ方)にはさっきの数値の組(0,12,1)の内、真ん中と右の数を選んで新しい組の左右に(12,,1)と書き、真ん中には左右の平均値を入れます。つまり(12,34,1)となります。
左の方の組(A1を持つ方)にはさっきの数値の組(0,12,1)の内、真ん中と左の数を選んで新しい組の左右に(0,,12)と書き、真ん中には左右の平均値を入れます(0,14,12)
これを再帰します。
ちゃんと書くとこう

構成法


A,B,C,(x,y,z)
計算して
E,F
を求める



Cl=FAl=CBl=B(x1,y1,z1)=(y,y+z2,z)



Cr=EAr=CBr=A(x2,y2,z2)=(x,x+y2,y)

(辺の長さは面積を求めるときに使ったやつをそのまま使います。)
こうして元の三角形A,B,C,(x,y,z)から、
次の三角形の座標を二つAl,Bl,Cl,(x1,y1,z1)Ar,Br,Cr,(x2,y2,z2)が求まりました

最初の三角形の数値の組は(0,12,1)とします。
こうして再帰して求めたい点を全部出していきます。
そして求まった点と数値の組ですが、順番がはっきりしています。
k回の再帰をしたとして、点と数値の組が最初のものも含めて合計2k+11個求まったとします。
点の列(ni,mi)をこう定めます。
(n0,m0)=A
(ni,mi)は求めた数値の組すべての中で真ん中の数がi番目に小さいものの点Ax,Bx,Cxのうち、Cxの座標
(n2k+1,m2k+1)=B
こうすることで求めた座標を順番どおりにできます。
(ただしABは最初の三角形のものです)

  要は厳密に順番に並べたかっただけです

こうして得られた順番に並んだ点の列(ni,mi)を使って、
これらを順に直線補間していきます。


まず区間[0,1]2k+1個の区間に分けます。
どう分けてもいいですが均等に分けておきます。
t0=0,t1=12k+1,t2=22k+1,...,t2k+1=1
そして、各区間[t0,t1],[t1,t2],[t2,t3],[t3,t4],...,[t2k+11,t2k+1]
に対して線形補間をします。
つまり、[ti,ti+1]においては、
fk(t)=(1ttiti+1ti)(ni,mi)+(ttiti+1ti)(ni+1,mi+1)=ti+1tti+1ti(ni,mi)+ttiti+1ti(ni+1,mi+1)
と定義します。

こうしてできた関数fk:[0,1]R2
ほぼほぼ欲しかった関数です。

そう。あとは極限limkをとればいいです。
f(t)=limkfk(t)
出来ました。

おまけ

svg画像での青い部分の面積と画像全体の面積との比率を出してみます。
0.15890278592375368
となりました。

投稿日:25日前
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

Y.K.
Y.K.
161
7810
掛け算が苦手

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. Osgood曲線とは?
  2. 画像の面積を求める
  3. 値を求める
  4. プログラム
  5. 結果
  6. 関数
  7. おまけ