• ベストアンサー

曲線の長さ

平面上の曲線の任意の区間の長さを求める場合、 区間を細分化し直線や二次曲線で近似して総和を求める方法以外に 何か他の方法はありませんでしょうか。

noname#88111
noname#88111

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.2

 例えば2次元ユークリッド平面上の三次ベジェ曲線上の点の座標(x,y)は、パラメータt∈[0,1]を用いて x(t) = Px[1] ((1-t)^3) + 3Px[2] ((1-t)^2) + 3 Px[3] (1-t)(t^2) + Px[4] (t^3) y(t) = Py[1] ((1-t)^3) + 3Py[2] ((1-t)^2) + 3 Py[3] (1-t)(t^2) + Py[4] (t^3) と表せます。ここに(Px[1],Py[1]),....,(Px[4],Py[4])は「アンカー」の座標です。  で、この曲線のながさ(「みちのり」と言います)は L=∫{t=0~1} √((dx/dt)^2 + (dy/dt)^2) dt で与えられます。 dx/dt = -3 Px[1] ((1-t)^2) - 6Px[2] (1-t) + 3 Px[3] (2- 3t) + 3Px[4] (t^2) dy/dtもおんなじことですね。 結局 L=∫{t=0~1} √(At^4+Bt^3+Ct^2+Dt+E) dt という形に整理できます。数値計算をするのなら、∫dtの代わりにΣΔtを使った区分求積法をやるだけの事ですから、特に問題はない。「答えが出なくなってしまう」なんてこと、全然ありません。  するってえと、この積分を解析的に解こうとすると一筋縄ではいかない、ということが問題なんでしょうか?

noname#88111
質問者

補足

確かに出ますよね(苦笑) この式「L=∫{t=0~1} √(At^4+Bt^3+Ct^2+Dt+E) dt」 は結局「t」の値を細分化して積分してるんですよね? この式で計算すると直線近似とどのくらいの精度が違うものなんでしょうか?

その他の回答 (4)

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.5

桁落ち?それはまともに端から累計していく場合に起こり得ますね。 A+B (|A|>|B|)という足し算において桁揃えをする際に、もし|B|がAの丸め誤差以下であると、答はA+B=Aになってしまって、Bが無視される。この現象のことですね。  それを避けるには、部分和を作りながら足していくのが有効です。 どの部分和もだいたい同じ位の大きさの値になるようにするのが理想的ですが、簡単にやるなら、区間の数Kを2の冪乗にしておき(つまりK=2^M) S=Σ{k=1,...,2^P} a[k] を求めるのに a[1,n]=a[2n-1]+a[2n] (n=1,2,...,2^(M-1)) a[m,n]=a[m-1,2n-1]+a[m-1,2n] (n=1,2,...,2^(M-m)) とすればm=Mになると a[M,n] = a[M-1,2n-1]+a[M-1,2n] (n=1) となって、 S=a[M,1] ですね。こういう風にやると、足し算する二つの数の絶対値は大体同じ位の大きさになるので、桁落ちが生じにくくなります。  丸め誤差を避けるためには、もう一つ重要なポイントがあります。 必ず計算精度(有効桁数)を変えて2度計算して、両者の答が(予想される誤差の範囲内で)合うことを確認して下さい。  もし答が合えば、有効桁数の少ない方の計算で既に丸め誤差が問題になっていないことが分かります。  しかしもし合わない場合には、有効桁数の少ない方が誤っていることは勿論、有効桁数の多い方だってまだ桁数が足りない可能性がある訳です。

noname#88111
質問者

お礼

解決しました。 失礼な文章があったにもかかわらず再度回答いただき本当にありがとうございました。

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.4

> 確かに出ますよね(苦笑) どういう意味でしょうね。 どうやら数値計算をやりたいだけのようですから、あとは区分求積法の意味をご理解になれば解決だと思うんですがね。 「直線近似」なる方法(どんな数学者に訊いたって知らんと言うと思いますけど)が区分求積法と違うと仰るのなら、その内容を補足してくださいな、苦笑する前にね。

noname#88111
質問者

お礼

最初に答えが出ないと書いたのは・・ 計算上では「答え」は出るのですが、それをプログラムとして組み込むと使えないものもあります。 曲線を分割して弧の長さを求めた場合、プログラムの中で使うと桁落ちしてしまう可能性があるのです。 「区分求積法」をそのようなやり方だと思っていまして・・なにせ専門外なので・・妙な質問の仕方しかできず 気を悪くされたようですいません。

  • siegmund
  • ベストアンサー率64% (701/1090)
回答No.3

状況がよくつかめないんですが... フラクタル曲線みたいなものは別にして, 解析的な式で書けている限り,y = f(x) 型なら私が書いた式, あるいはパラメーター表示なら stomachman さんが書かれた式で 曲線の長さが厳密に表現できます. 確かに微小範囲 x~x+Δx 間で直線近似していますが, Δx→0 の極限をとっていますので,積分形にした表現は厳密です. 積分が解析的にできなければ,数値積分で必要なだけ精度を上げられます. 本質的に stomachman さんの趣旨と同じことです. 状況をもっと具体的に書かれた方が,回答しやすいと思いますよ. 所詮専門外ですので,私がわかるとは限りませんが...

noname#88111
質問者

お礼

回答ありがとうございます。 プログラムの中で使うベジェの式なのです。 近似で答えは出るのですが「細分化」しない方法を要求されておりまして・・ 色々調べてみましたが「直線近似」以外では求められないようでした。 ありがとうございました。

  • siegmund
  • ベストアンサー率64% (701/1090)
回答No.1

y= f(x) の形で,曲線の関数形がわかっているんでしょうか? わかっているなら,x1~x2 の間の長さは (1)  ∫_{x1}^{x2} √{ 1 + (dy/dx)^2 } dx ですが.... 円のように同じ x の値に対して y が2つ以上あるなら, 部分部分に分けて別々に長さを計算する必要があります.

noname#88111
質問者

お礼

早速の回答ありがとうございます。 しかしながら・・それじゃダメなのです・・・・・ 何故かと言うとその式は結局、直線近似を積分しているのでベジェの式を展開してその式にあてはめると、答えが出なくなってしまうのです。 やはり直線近似しか方法はないのですかね・・

関連するQ&A

  • excelで、曲線の長さを計測する方法

    excelで、曲線の長さを計測する方法 オートシェイプの曲線の長さを知るためにはどうしたらよいのでしょうか? グラフ上の線ではなく、フリーハンド等の曲線も含め、長さを簡単に知る方法がありましたら、教えてください ちなみに、曲線に沿って、直線を数本引いて、各直線の長さの総和より、近似的に求める方法がありますが、 各直線に対して、図形の書式設定の縦横のサイズから、直線の長さを求めるため 少し手間がかかると思います。 何か、良い方法はないでしょうか?

  • 曲線近似

    いつもお世話になっています。 曲線に近似する直線を描きたいのですが求め方がわかりません。 円や円弧のような曲線を直線で表したいのですが、どうしたらいいのでしょうか。できれば、直線の傾きを角度で指定できる方法が知りたいです。 よろしくお願いします。

  • エクセル近似曲線(範囲指定)

    10個のプロット点によって作られているエクセル曲線の、右端3つのみの直線近似曲線が引きたいのですが何かいい方法はないでしょうか? 右端3つのみの近似曲線の関数(y=○x+▽)も知りたいです。 「近似曲線の追加」→「直線近似」でやると すべてのプロット点に対する近似直線しかかけません。 宿題の期限が近く、困っています。 どなたかお助けください。よろしくお願いします。

  • エクセル 近似曲線をひきたい

    エクセルにて作成した表に近似曲線を引きコピー、 それをパワーポイントにてペーストして最終的にパワーポイントにて編集しています。 この表に近似曲線を引きたいのですが教えてください。 引きたいのは近似曲線にて求めたy=ax+bの式の「直」線です。 6ポイントくらいの表で近似曲線を選択して引いていた場合、 直線となり気にならなかったのですが、 今回、50~100ポイントくらいのデータ数の表に 同様に近似直線を引いたら「直」線ではなく、クネクネ曲がっている「曲」線になってしまいました。 近似曲線は名前のとおり、データ数が多いと曲線になるものなのでしょうか? それともパワーポイントにペーストしたことによるものでしょうか? もし解決できない場合、求めた式を引く方法も教えていただけるとありがたいです。

  • 近似曲線の使い方について

    Excel2007(Win版)を使っているのですが、 現在、近似式をデータを選択してグラフに直線(自分の場合は1次式ですので)描くことはできたんですが、データ以外の範囲は表示されなくて困っています。 もっと、具体的にいうと現在y=5x+20という近似式の直線が書かれているのですが、基になるデータがx=5,y=45 x=10,y=70 という二つのデータから近似曲線を描いたとすると、直線はxは5~10まで、yは45~70までの範囲でしか書かれていません。 これをなんとかx=0~100 y=0~100までの範囲で書きたいのですが、何か良い方法はないものでしょうか? お返事お待ちしております。

  • Excel近似曲線の仕組みについて

    Excelグラフの近似曲線についての質問です。 業務でグラフを作成し、近似曲線を出す予定ですが、 Excelの近似曲線はどういった仕組みを使って書き込む方法がありますか? 当方は最小二乗法で書き込む方法しか存じ上げておりませんが、 それ以外にExcelグラフで近似曲線を求める方法はありますか? 業務上精度が悪いと使用できないため、もし他に近似曲線を出せる方法があれば それも教えて頂きたいです。 よろしくお願いいたします。

  • 2次曲線です!

    平面上に点AとAを通らない直線gとがある。この平面上で点PがPからgまでの距離が線分PAの長さに等しいように動くときにできる曲線をKとする。この平面上の点Qから曲線Kに2本の接線が引けるとき、その接点をGおよびHとする。次のことを証明せよ。 (1)Qがg上にあれば、直線GHはAを通る。 (2)直線GHがAを通れば、Qはg上にある。 よろしくお願いします><

  • 近似曲線の原理

    こんにちは。 業務で困っております。知恵をお貸し下さい。 Exelでグラフを作成し、近似曲線(直線)を入れ、数式まで表示させたのですが、この近似曲線がどういう原理で引かれているのか教えて頂けないでしょうか? どうか宜しくお願い致します。

  • エクセルの移動平均のグラフについて

     例えば区間1~5にデータが0,1,2,1,0とそれぞれ配されている場合について教えていただきたいことがあります。  この場合「3区間の移動平均」近似グラフを表示させると「区間4」のところにピークが来る近似曲線が表示されます。  この近似曲線をデータが最大値を示す「区間3」にピークが来るように近似曲線を平行移動させる方法がありましたら教えていただきますようにお願いいたします。

  • 近似曲線のずらし方について

    エクセルを使いグラフを作っています。 いま10個の点の近似線を引くときに 左2個の点を含めずに近似曲線を作ろうとしています。 (○○●●●●●●●●の点がありましたら 黒の部分の右8個という意味です。) しかし、左2個分のデータを空欄にして作ってみても 近似曲線が10個の点をとってしまいます。 そこで質問なのですが、このような場合に左2個分の 近似曲線部分を消すことのできるいい方法がありますでしょうか? 分かりづらい文章ですみませんが宜しくお願い致します。