[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重心動揺の解析で軌跡長と内部面積をもとめたいのですが』(どい)
データより散布図は作成したのですがそこから
@軌跡長
A内部面積
を求めたいのですが初心者でなかなかうまくいかず苦戦しています。
よろしくご教授いただけたらと思います。
どんなデータから、何を計算すべきかが分からないと答えようがありません。 軌跡長というのは、データの順番につないだ線の長さを出すのですか? 内部面積って、データを順番につないだ線は多角形を形成しているのですか?多角形にならない とすると、どのようにして面積を出すのですか?包絡線で囲まれた面積ですか? 実際のデータと、手動で求めるときの求め方を説明ください。 2010/09/07 12:55 (ちゅうねん)
XY座標をつなげたものは線分の連続ですから、面積を求めるのには 最終的に多角形になるのでは? ちゅうねんさんも仰られてますが実際のXYデータとセルの位置は示せませんか? (momo)
あんまり面積とか数学的な事は詳しくありませんが とりあえず叩き台としてユーザー定義関数でも。 (合ってるかな・・・?)
Function myArea(X As Range, Y As Range, flg As Integer) As Double '##### flg = 1 : 面積 '##### flg = 2 : 周囲長 Dim myX() As Double, myY() As Double, buf(1 To 2) As Double Dim i As Long, r As Range If X.Cells.Count <> Y.Cells.Count Then Exit Function ReDim myX(1 To X.Cells.Count), myY(1 To Y.Cells.Count) i = 0 For Each r In X i = i + 1 myX(i) = r.Value Next r i = 0 For Each r In Y i = i + 1 myY(i) = r.Value Next r For i = 1 To UBound(myX) - 1 buf(1) = buf(1) + (myX(i) * myY(i + 1) - myX(i + 1) * myY(i)) / 2 buf(2) = buf(2) + Sqr((myX(i + 1) - myX(i)) ^ 2 + (myY(i + 1) - myY(i)) ^ 2) Next i buf(1) = buf(1) + (myX(i) * myY(1) - myX(1) * myY(i)) / 2 buf(2) = buf(2) + Sqr((myX(1) - myX(i)) ^ 2 + (myY(1) - myY(i)) ^ 2) myArea = buf(flg) End Function
(momo)
時間 Y X
0.01 -0.541384005 -3.30386856
0.02 -0.541384005 -3.30386856
0.03 -0.605656782 -3.353263917
0.04 -0.683878717 -3.512349951
0.05 -0.850949493 -3.618236483
0.06 -0.930891512 -3.636337821
0.07 -0.988180448 -3.672463847
0.08 -0.959788327 -3.760082381
0.09 -0.959788327 -3.760082381
0.1 -0.9908412 -3.80720512
おはようございます。
ご掲示のデータですとポイントを繋げた線分が閉じられていませんが どの面積を求めるのでしょう? (momo)
ちゃんと線分が閉じられているのでしたら 上に載せたコードを標準モジュールにコピペしてから セルに 面積なら =myArea(Xの範囲,Yの範囲,1) 外周の長さなら =myArea(Xの範囲,Yの範囲,2) と入れてみてください。
標準モジュールへの転記方法は Alt+F11でVBEが出るので 挿入 → 標準モジュール として 出てきた白い画面に貼り付けるだけです。
(momo)
>多角形というよりは変形した図形になると思います。 この一文も気になりますが・・・。
momoさんのmyArea関数、ちょこっとだけ気になったので
外周は、ピタゴラスの定理だとして、 面積は、 http://ja.wikipedia.org/wiki/%E5%A4%9A%E8%A7%92%E5%BD%A2#.E9.9D.A2.E7.A9.8D.E5.85.AC.E5.BC.8F
これですよね? 昨日、子供の数学の証明問題に似たようなものがあったもので ピンときました。点の回る方向によって、負になるらしいので 計算の最後に
buf(1) = Abs(buf(1))
これ入れておいた方がよさそうですねえ!!
私には、データ分析の仕事は殆どきませんが、きた時に慌てないように 私のアーカイブに入れておきます。
ichinose
あ、そうですね。 測量まではいかないですが、ちょっとした面積を求めるのに良く使っていました。
確かに座標の回転方向によって負になります。 事実を知っていながらAbs入れ忘れてました・・・ 個人的には負の解が必要な時もあってワークシート関数で というかセルの方で=ABS(myArea(・・・))とすればいいかな〜と思っていたので。
ichinoseさんありがとうございます。 ichinoseさんのアーカイブに入るなんて光栄です・・・ (momo)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.