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

このQ&Aに関連する最新のQ&A

A 回答 (5件)

 例えば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を使った区分求積法をやるだけの事ですから、特に問題はない。「答えが出なくなってしまう」なんてこと、全然ありません。

 するってえと、この積分を解析的に解こうとすると一筋縄ではいかない、ということが問題なんでしょうか?

この回答への補足

確かに出ますよね(苦笑)

この式「L=∫{t=0~1} √(At^4+Bt^3+Ct^2+Dt+E) dt」
は結局「t」の値を細分化して積分してるんですよね?

この式で計算すると直線近似とどのくらいの精度が違うものなんでしょうか?

補足日時:2001/08/21 09:21
    • good
    • 0

桁落ち?それはまともに端から累計していく場合に起こり得ますね。


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度計算して、両者の答が(予想される誤差の範囲内で)合うことを確認して下さい。
 もし答が合えば、有効桁数の少ない方の計算で既に丸め誤差が問題になっていないことが分かります。
 しかしもし合わない場合には、有効桁数の少ない方が誤っていることは勿論、有効桁数の多い方だってまだ桁数が足りない可能性がある訳です。
    • good
    • 0
この回答へのお礼

解決しました。

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

お礼日時:2001/08/24 09:13

> 確かに出ますよね(苦笑)



どういう意味でしょうね。
どうやら数値計算をやりたいだけのようですから、あとは区分求積法の意味をご理解になれば解決だと思うんですがね。

「直線近似」なる方法(どんな数学者に訊いたって知らんと言うと思いますけど)が区分求積法と違うと仰るのなら、その内容を補足してくださいな、苦笑する前にね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/08/23 09:07

状況がよくつかめないんですが...



フラクタル曲線みたいなものは別にして,
解析的な式で書けている限り,y = f(x) 型なら私が書いた式,
あるいはパラメーター表示なら stomachman さんが書かれた式で
曲線の長さが厳密に表現できます.
確かに微小範囲 x~x+Δx 間で直線近似していますが,
Δx→0 の極限をとっていますので,積分形にした表現は厳密です.
積分が解析的にできなければ,数値積分で必要なだけ精度を上げられます.

本質的に stomachman さんの趣旨と同じことです.

状況をもっと具体的に書かれた方が,回答しやすいと思いますよ.
所詮専門外ですので,私がわかるとは限りませんが...
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

プログラムの中で使うベジェの式なのです。
近似で答えは出るのですが「細分化」しない方法を要求されておりまして・・

色々調べてみましたが「直線近似」以外では求められないようでした。

ありがとうございました。

お礼日時:2001/08/23 08:52

y= f(x) の形で,曲線の関数形がわかっているんでしょうか?


わかっているなら,x1~x2 の間の長さは
(1)  ∫_{x1}^{x2} √{ 1 + (dy/dx)^2 } dx
ですが....
円のように同じ x の値に対して y が2つ以上あるなら,
部分部分に分けて別々に長さを計算する必要があります.
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

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

やはり直線近似しか方法はないのですかね・・

お礼日時:2001/08/20 18:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPhotoshopで曲線の矢印付線をつくりたい

Photoshopで曲線の矢印付線をつくりたいのですが
ラインツールで直線の矢印付線をつくることは可能なのですが曲線はできません。
他の方法でキレイに曲線の矢印付の線を描くことはできませんか?
イラストレーターか無理やりベージュ曲線を使うしかないのでしょうか?

ちなみにバージョンはCS2です

Aベストアンサー

Illustratorがあれば移動した方が簡単です。

Photoshop上であれば
・カスタムシェイプツールを選択
・オプションバー [シェイプ]の▼、さらにパレットの→ で[矢印プリセット]
・適当なシェイプを選んで描画
・(ツールボックスの)アンカーポイント切り替えツールで整形
・必要に応じてパスパレットの→ パスの塗りつぶし(描画色)とすればいいと思います、自由度は低いですけど。

Q平面上の交わる2直線に垂直な直線は、その平面に垂直、すなわち、その平面

平面上の交わる2直線に垂直な直線は、その平面に垂直、すなわち、その平面上のすべての直線に垂直である。

この定理を初等幾何で示す方法を知りたいのですが、分かる方がいましたらよろしくお願い致します。

Aベストアンサー

平面上の2直線をl,mとし、それに垂直な直線をnとする。
2直線l,mの交点をOとし、Oを通る平面上のl,m以外の任意の直線をsとする。

平面上でOを中心とした適当な半径の円を描き、直線lとの交点をA,A'、直線mとの交点をB,B'とする。
また、OD=OAとなる直線n上の点をDとする。

線分ABと直線sとの交点をC、線分A'B'と直線sとの交点をC'とする。
(もし、線分ABと直線sとの交点がない場合は、BとB'を交換すれば必ず交点が存在します)

以上から、
AC=A'C'、かつ、△ABDと△A'B'Dは合同なので、
△ACD、△A'C'Dは合同
よって、CD=C'Dであり、△CC'Dは二等辺三角形となる。
OはCC'の中点なので、∠CODは直角となり、直線sは直線nと垂直である。

平面上のすべての直線は、Oを通る平行な直線が存在するので、直線nは平面上のすべての直線と垂直になる。

Q(^_^;) ワードのオートシェイプで、曲線の先に矢印をつける方法、ありますか?

 Word2000を使ってます。図形描画のオートシェイプで、直線の先(端っこ)に矢印をつけられるようになってますが、曲線の先(端っこ)に矢印をつけることはできませんか?
 矢印を入れるなら、手書きがやむをえないんでしょうか?
 曲線と、矢印つき直線を合成しようとしても、なかなかうまくいきません。

Aベストアンサー

書いた曲線を右クリックして「オートシェイブ書式設定」で両端の形を指定できたはずですが・・

Qエクセルの散布図で3点の近似曲線を描いた後、二次関数で近似したところ、

エクセルの散布図で3点の近似曲線を描いた後、二次関数で近似したところ、
y=1E+8x^2-900000x+1500という関数が得られました。
(ここで、y=ln(u)、x=(1/v)です。)
ここでuを求めるためには、
u=exp(1E+8(1/v)^2-900000(1/v)+1500)と入力したらいいですよね?

なぜか、もともとのエクセルのセルの数値と合わなくなってしまいました。
考えられる原因をご教示いただきたいです。

Aベストアンサー

表示されている数式の係数の精度が足りない。
グラフに表示された数式を右クリックして,「データラベルの書式設定」で,表示形式―数値を選んで,小数点以下の桁数を3とか4とかにしてみたどうでしょう。 

Q曲線の矢印

パワーポイントで曲線の矢印を書きたいのですがやり方がわかりません。
宜しくお願いします。

Aベストアンサー

naohana_2005さん 今日は!
■線(直線、曲線、矢印...)↓
http://www.shinki-kaitaku.com/s13_column/partner04/p015.html
内容:線には、いくつかの種類がありますが、主に使うのは以下の4つ   です。a.直線 b.曲線c.矢印d.フリーフォームについて説明   されてます。
●曲線を描く↓
http://office.microsoft.com/ja-jp/powerpoint/HP051922171041.aspx
●PowerPoint で描画する↓
http://office.microsoft.com/ja-jp/powerpoint/HA101962731041.aspx
内容:[図形描画] ツールバー (ツールバー : コマンドを実行するのに使用するボタンやオプションを含むバー。ツールバーを表示するには、[ユーザー設定] ダイアログ ボックス ([ツール] メニューの [ユーザー設定] をクリックして、[ツールバー] タブをクリックします) を使用します。)の [オートシェイプ (オートシェイプ : アプリケーションにあらかじめ用意されている図形のこと。長方形や円などの基本図形、さまざまな線種、コネクタ、ブロック矢印、フローチャート、星とリボン、吹き出しなどがあります。)] をクリックします。[線] をポイントし、 (曲線) をクリックします。
以上を参考にされ図形の加工で「太くする」・「影をつける」・「3Dにする」
で好みの曲線矢印にして下さい。
PowerPointで作成し難ければWordで作成して其れをPowerPointに戻せます。

naohana_2005さん 今日は!
■線(直線、曲線、矢印...)↓
http://www.shinki-kaitaku.com/s13_column/partner04/p015.html
内容:線には、いくつかの種類がありますが、主に使うのは以下の4つ   です。a.直線 b.曲線c.矢印d.フリーフォームについて説明   されてます。
●曲線を描く↓
http://office.microsoft.com/ja-jp/powerpoint/HP051922171041.aspx
●PowerPoint で描画する↓
http://office.microsoft.com/ja-jp/powerpoint/HA101962731041.aspx
内容:[図形描画] ツールバー (ツールバー : ...続きを読む

Q曲線と曲線の交点を通る曲線の求め方(曲線群)

皆様、こんにちは。

円A:f(x,y)と円B:g(x,y)の交点を通る円の方程式は全て
kf(x,y)+lg(x,y)=0の形で表せると習ったのですが、

これの応用で
円A:f(x,y)と円B:g(x,y)の交点を通る三次曲線は全て
(ax+b)f(x,y)+(cx+d)g(x,y)=0・・・・(1)
の形で表せるのでしょうか?

もし2円の交点を通る3次曲線が全て(1)で表せるのでしたら
その証明方法なども教えてください。

よろしくお願いします。

Aベストアンサー

#1さんがすでにご指摘の通り、
三次曲線をすべて (1) で表すことはできません。
そして、kf(x,y)+lg(x,y)=0 も、
二次曲線すべてではなく、円だけを表しているにすぎません。
でも、vigo24 さんの着眼点はなかなかおもしろいと思います。
これをヒントにして、次のように考えてみました。

f1(x,y) = x^2 + y^2 + l1 x + m1 y + n1
f2(x,y) = x^2 + y^2 + l2 x + m2 y + n2
とおきます。そして、f1(x,y) = 0 と f2(x,y) = 0 が
円であり、2点で交わるものとします。
(円でない場合もありますし、2点で交わらない場合もあります。
詳細は http://okwave.jp/qa3076718.html をご覧下さい。)

f3(x,y) = f1(x,y) - f2(x,y) = (l1-l2)x + (m1-m2)y + (n1-n2) とおきます。
すると、f1(x,y) = 0 かつ f2(x,y) = 0 ならば f3(x,y) = 0 が成り立ちます。
これを利用して、次のような方程式を考えてみます。
f4(x,y) = a f1(x,y) + b f2(x,y) + (cx+dy) f3(x,y) = 0

まず、f4(x,y) = 0 が二次以下の曲線になることはすぐにわかります。
そして、f1(x,y) = 0 と f2(x,y) = 0 の交点を (x1,y1) , (x2,y2) とすると、
f1(x1,y1) = 0 かつ f2(x1,y1) = 0 ですから、f3(x1,y1) = 0 となり、
f4(x1,y1) = a×0 + b×0 + (c x1 + d y1)×0 = 0 となります。
ですから、f4(x1,y1) = 0 , f4(x2,y2) = 0 となり、
曲線 f4(x,y) = 0 は f1(x,y) = 0 と f2(x,y) = 0 の交点を通ります。

さて、問題となるのが、f4(x,y) = 0 が2点を通る二次以下の曲線を
すべて網羅しているかどうか、ということです。
このことについて厳密な証明はしていませんが、
二次以下の曲線は ax^2 + bxy + cy^2 + dx + ey + f = 0 で表せます。
つまり、パラメータは6個(0でない係数で割れば5個)必要です。
そして、曲線 f4(x,y) = 0 のパラメータは、a,b,c,d と交点2個で、
やはり6個(0でない係数で割れば5個)あることになります。
ですから、f4(x,y) = 0 の形で、
2点を通る二次以下の曲線をすべて表せているものと思われます。

ここからいろいろ発展させることができると思います。
例えば、円と円の交点ではなく、二次曲線と二次曲線の交点で、
交点が4個あるとすれば、k1 f1(x,y) + k2 f2(x,y) = 0 の形で
交点を通る二次曲線を表せるかもしれません。
vigo24 さんのもともとの質問である、円と円の交点を通る三次曲線も、
(a1 x + a2 y + a3) f1(x,y) + (b1 x + b2 y + b3) f2(x,y)
+ (c1 x^2 + c2 xy + c3 y^2) f3(x,y) = 0
の形で表すことが可能ではないかと思われます。
(上記の形ではパラメータが1つ多すぎるので、
不要なパラメータが含まれていると思います。)

#1さんがすでにご指摘の通り、
三次曲線をすべて (1) で表すことはできません。
そして、kf(x,y)+lg(x,y)=0 も、
二次曲線すべてではなく、円だけを表しているにすぎません。
でも、vigo24 さんの着眼点はなかなかおもしろいと思います。
これをヒントにして、次のように考えてみました。

f1(x,y) = x^2 + y^2 + l1 x + m1 y + n1
f2(x,y) = x^2 + y^2 + l2 x + m2 y + n2
とおきます。そして、f1(x,y) = 0 と f2(x,y) = 0 が
円であり、2点で交わるものとします。
(円でない場合もありますし、2...続きを読む

QIllustratorで立体的な矢印の曲線を作成するには?

いつもお世話になっております。
Illustratorで、添付の画像2種類を合わせたような画像を作りたいと思っています。

具体的には、(ア)のような曲線的な矢印を(イ)の様に立体的に
見せたいです。
試行錯誤の末、回転ツールを使って(イ)のような直線矢印は作ることができましたが、このツールは曲線には使えないのでどうしたものか困っています。
(イ)をアウトライン化?して、さらに変形する、なんて事が出来るのでしょうか?
ご教授のほど、よろしくお願いいたします。

Aベストアンサー

(イ)を作る時に垂直の(イ)を作る(前後の傾きはOK)。
(イ)を選択ツールで選択>オブジェクト>アピアランスを分割>オブジェクト>クリッピングマスク>解除>バウンディングボックスか回転ツールで90度回転>選択ツールで選択してブラシパレット内にドラッグ>アートブラシにチェックして、OK>適当に名前を付けて、OK>曲線(塗り無し・線有り)を描いて、登録したブラシをクリック>先端の三角を綺麗に見せるには、曲線の線端部分は直線にする。
又は、先端と棒を別々に3Dで作る>棒だけを選択ツールで選択>オブジェクト>アピアランスを分割>オブジェクト>クリッピングマスク>解除>バウンディングボックスか回転ツールで90度回転>選択ツールで選択してブラシパレット内にドラッグ>アートブラシにチェックして、OK>適当に名前を付けて、OK>曲線(塗り無し・線有り)を描いて、登録したブラシをクリック>先端と棒を組み合わせる>棒の切り口が楕円になる場合は曲線の長さや線幅を調整。
但し、光の方向は曲線に合せて変化しないので3Dで作る時に光の方向に注意が必要です。

Q直線近似法と対数近似法とは?

仕事で急に必要になりました。
直線近似法と対数近似法について
教えていただきたく投稿いたしました。

Webで調べたのですが

(x_1,y_1),(x_2,y_2),...,(x_n,y_n)     (x_1<x_2<...<x_n)
とn個の点から
直線近似法はY=aX+bという式で近似し、
近似の仕方には最小二乗法というのがあるようです。最小二乗法以外の方法があれば教えてください。

また、対数近似法については上記n点を
(x_1,log(y_1)),(x_2,log(y_2)),...,(x_n,log(y_n))     (x_1<x_2<...<x_n)
とした上で直線近似法を用いて得られた直線Y=aX+b
を用いて10^(aX+b)で求める方法でよろしいのでしょうか?

以上宜しくお願いいたします。

Aベストアンサー

>最小二乗法以外の方法があれば教えてください
あります。ないです。
どちらも答えです。
仮に「ある」と言うとすれば、例えば、最小1乗絶対値近似などが考えられます。
(グラフの直線から、各点の距離を測って、それの距離の合計が最小になるようにする方法)
しかしながら、なぜ、そういう手法が用いられないかと言うと、世の中の物のばらつきが正規分布(ガウス分布)に近いばらつき方をすることが知られているからです。

しかも、計算・統計のしやすさからしても、最小二乗法のほうが、結局のところ簡単なのです。

ご質問のような二次元データが一次関数的な傾向を示しているとすれば、最小二乗法で求めた直線の周りには、各データの点が、ちゃんと正規分布的にばらついて、取り巻きます。

なお、ご質問文の最後のほうの、対数近似の考え方は、それで正しいです。


というわけで、前置きが長くなりましたが、
まずは最小二乗法を使ってください。
それで、グラフが見た感じダメでしたら、同じく最小二乗法的な二次関数近似、三次関数近似・・・や、指数・対数近似をやってください。

やり方は本に書いてありますが、お仕事で使われるのであれば、エクセル等の表計算ソフトを使えばいいです。その機能がない表計算ソフトはありません。
例えば、エクセルであれば、2つの列にそれぞれx、yデータをざーっと書き込みます。そして、挿入→グラフという操作でグラフの作成を開始し、グラフの種類で「散布図」を選んでグラフを作った後、グラフの上で右クリックして「近似曲線の追加」(だったかな?)をやれば、たちどころに近似直線あるいは曲線が完成します。
さらには、その近似曲線に右クリックして「式の追加」(だったかな?)をやれば、その近似曲線が、どういう式の曲線かが表示されます。


というわけで、話が長くなりましたが、まずは、騙されたと思って、エクセル等の表計算を使ってください。

>最小二乗法以外の方法があれば教えてください
あります。ないです。
どちらも答えです。
仮に「ある」と言うとすれば、例えば、最小1乗絶対値近似などが考えられます。
(グラフの直線から、各点の距離を測って、それの距離の合計が最小になるようにする方法)
しかしながら、なぜ、そういう手法が用いられないかと言うと、世の中の物のばらつきが正規分布(ガウス分布)に近いばらつき方をすることが知られているからです。

しかも、計算・統計のしやすさからしても、最小二乗法のほうが、結局のとこ...続きを読む

Q【Aviutl】矢印を曲線上に伸ばす方法

Aviutlを使用し、動画を作成しているのですが、アニメーション効果を付けたく質問させて頂きました。(拡張編集プラグインは既に導入済みです。)

イメージとしては、数字の「9」をなぞる様に矢印が伸びていく物を作りたいです。
便利なプラグイン等やアドバイスなど頂ければ幸いです。

宜しくお願い致します。

Aベストアンサー

こんなの?
https://www.youtube.com/watch?v=IThiFEjdpjo

Q平面近似式から2次元座標を求めたい

閲覧ありがとうございます。

質問の内容ですが、
平面近似式(z=ax+by+c)から2次元座標を求めようと思うのですが、
ご教授願えないでしょうか?
現状、近似式のabc(法線ベクトル)を求めるところまではできているのですが、
そこから2次元に直すところで躓いています。
傾いた面をz軸なりに垂直にするように回転させればいけると思うのですが・・・。
どうも行列計算が多少苦手で考えがまとまりません。

宜しくお願い致します。

Aベストアンサー

平面の回転すなわち空間座標の回転はロドリゲスの公式を使用します。空間座標の回転は、最終到達点が同じでも回し方で回転後の数値が変わります。ここではz軸と法線ベクトルを含む平面内で法線ベクトルを回転する、と決めれば簡単です。

回転角θはz軸と法線ベクトルの内積の公式から求まり、回転軸はz軸と法線ベクトルのベクトル積から求まります。これらをロドリゲスの公式に代入すれば求まります。

http://www.cg.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/tech07.html
下の方に任意の単位ベクトルのl回りのθ回転があります。


人気Q&Aランキング