rrryw2さんに対する数学の再質問です・・・.直線で囲まれた図形(n角形)の面積を出したいですその頂点はすべて三次元の座標値(x、y、z)で出ていますただしその座標値はすべて誤差を含んでいます(各座標値は、光波測距儀でレーザーを使って測定した値です。光波はその図形の真正面から取った物ではなく、角度がある斜め方向から取ったものです)そこでまず三次元の平面Lax+by+cz+d=0を仮定しますそして各座標値と平面Lの距離を求めますそしてその各距離の二乗の総和が最小になるように最小二乗法を使ってa、b、c、dの値を求めて平面Lを確定しますそして各座標値を平面Lに投影しますそしてその平面Lを回転させてz=0にして、平面Lがx軸、y軸とのみ平行になるようにします。つまり平面L上のすべての点の値が(x、y、0)になるようにします平面の回転によって変換された回転後の各座標値を求めます。(これは行列を使うのでしょうか?)そして変換後の座標値に基づいて、倍横(縦)距を使って(Σ((Xn+1-Xn-1 *Yn))/2でn角形の面積を求めたいのですが平面Lのa、b、c、dを求める方法と平面Lをx軸y軸に平行になるように、回転させる式。(最終的にほしいのはそれによって回転後の各座標値)の出し方がわかりませんexcelを使おうと思っています再びとなりますが・・・・よろしくお願いします
寄せられた回答
昨日回答したもののうち,「最小二乗法で近似平面を求める。」部分と「各点をその平面上に落とす。」が実は要らないことがわかったのです。昨日の回答の最後の考察で,>この質問を見た当初,いきなり面積でやれば速いじゃん,なんて考えましたが,誤差があるとそれが累積されるので良くないという結論に達しました。三角形の面積を求める過程で,誤差を相殺していけるかなとも思いましたが無理でした。と書きましたが,ウソでした。最初の直感が正しかったのです。「誤差が蓄積」と考えたのは「1つ1つの三角形の面積を『絶対値』で求めて計算する」というイメージがあったからです。しかしながら,実際は『ベクトル』で求めたものの和を取ってから最後に絶対値にするので,ベクトルの状態の和で誤差が相殺されていきます。三角形の面積は外積としてベクトルで表されます。誤差はベクトルの大きさにも含まれますが,同時に,向きにも含まれます。2つのベクトルの和は,「和の方向のベクトルに正射影したベクトルの和」ということが出来ます。ですから,単純にベクトルの和を計算するだけで,「近似平面上に落とす」という操作を同時にやっていることになりま す。試しに3点でやってみます。A(1、0、0)、B(0、2、0)、C(0、0、3)とすると,AB↑×AC↑=(-1、2、0)×(-1、0、3)=(6、3、2)で,面積7/2です。OA↑×OB↑+OB↑×OC↑+OC↑×OA↑=(0、0、2)+(6、0、0)+(0、3、0)=(6、3、2)となり,同じ結果になります。今の例は,いわば「誤差の無い状態」ですが,たくさんの点があって,誤差の分布がランダムであれば,和の方向ベクトルは昨日求めた近似平面の法線ベクトルと同じになると考えられます。理屈はここまでにしておいて,具体的に。。。点の座標(測定値)をAi(xi、yi、zi)とし,A[n+1]=A1とします。△OAiA[i+1]の面積を,i=1〜nまで足します。外積は|xi、yi、zi;x[i+1]、y[i+1]、z[i+1];e1、e2、e3|=(yiz[i+1]-y[i+1]zi、zix[i+1]-z[i+1]xi、xiy[i+1]-x[i+1]yi)です。これならエクセルで すぐに式を入れられますよね。その,総和を求めて,最後に,(√((x成分)^2+(y成分)^2+(z成分)^2))/2をすれば終わりです。これならワークシート(データ数)行×6列プラスアルファで終わり,昨日の計算の1/3くらいの計算量で終わりです。「外積」自体高校範囲ではありませんが,大学初年で学習し,受験テクニックとしても良くあるので,さほど難しくはありません。空間の三角形の面積を外積で求めたということは,面積をベクトルの大きさとして表し,方向は三角形の法線の方向だということです。誤差があれば,この方向がズレる訳ですが,和を取ることで,最終的に1つのベクトルに正射影した長さの和を求めることになります。また,複雑な形になったときでも,向きの具合で時には引き算となり,最終的に多角形の内部の面積だけが残ります。デコボコが「向き」によって調整されて,誤差がたまらないということです。「180度」とは縁もゆかりもない話です。。。。この理屈はバリバリ理系の技術者にでも検証させて下さい。でも,ある程度アタマのヤワラカい人でないと理解できないかもしれません。後はワークシートの設計私なら,A1〜G1までに"点番号","x此 舵","y座標","z座標","X","Y","Z"と入力し,A列は1からの連番,B2〜D(n+1)までは,データを入力しE2は"=C2*D3-C3*D2"F2は"=D2*B3-D3*B2"G2は"=B2*C3-B3*C2"として,n+1行目までコピーn+2行目にE列,F列,G列の和あとはどこかに"=sqrt(E(n+2)^2+F(n+2)^2+G(n+2)^2)/2"ちなみに「E(n+2)」とはn=10なら,「E12」ということです。。。今日は私,建設業の決算報告書を作成していますよ。契約書も注文書もないのをどうしようかと思案中です。。。
レーザー加工システム
Comments