このページについて | ||||||||||||||||||||||||||
このページは、mura's home の AutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
タイトルおよび質問内容は上記より引用しています。 引用した質問内容は、バックカラーが となっています。 当方の発言は、バックカラーが となっています。 その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています。 また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、 ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
|
オブジェクト情報(LIST)で表示される楕円の円周(弧長)が
他で求めた値と(有効数字で11桁目以降が)異なるのですが、
精度は有効数字10桁程度ということでしょうか?
具体例
楕円(中心:0,0,0/主軸:1000,0,0/補助軸:0,500,0)を作図、
[形式]-[単位管理]の長さの精度を最大の"0.00000000"にて、
オブジェクト情報(LIST)にて楕円の円周を確認すると、
・円周:
4844.22411036
を得る(2000iにて確認) 以下新規図面でどうぞ(最後のLの後にスペース2つ)
_ellipse C 0,0 1000,0 500 LUNITS 2 LUPREC 8 _zoom E _list L カシオ計算機株式会社の高精度計算サイト(keisan.casio.jp) 特殊関数 >楕円積分 >第2種完全楕円積分 E(k)で、演算桁数30桁、 k=0.86602540378443864676372317075294 とすると、 E(k)=1.21105602756845952480356289955 となる。 #ここに #k=√M # =√{(主軸の長さ^2-副軸の長さ^2)/(主軸の長さ^2)} # =√{(1000^2-500^2)/1000^2} # =√0.75 # =0.86602540378443864676372317075294 よって全周は、 S=4*E(k)*1000 =4*1.21105602756845952480356289955*1000 =4844.2241102738380992142515982 |
おや、 /pre タグが利かない?!同じ行だとNG?
同じ行に pre と /pre タグのテスト
ここは pre タグの中 ここは /pre タグの次行 |
著作権者の許可を得ていないため削除
http://ja.wikipedia.org/wiki/å精度
>根拠の無い直感ですけど、10桁ならば、そんなものかなと思ってしまう。
有効桁数で最大15桁(倍精度)は、
ユーザーが当然に期待する精度だと思うのですが、15桁は期待しすぎ?
AutoCADの(楕円弧長の)計算精度が10桁ならば、それはそれで仕方がないですが、
それなら、長さの精度(LUPREC)にかかわらず、オブジェクト情報(LIST)で表示される
楕円弧長のみは表示桁数を有効桁数で最大10桁(または11桁)までとするか、
仕様で計算精度をユーザーに告知する必要があるのでは?と思います。
これでは、オブジェクト情報の値をそのままで寸法値に使用できません。
#上記の単位をkmとすると4844.22411036kmの0.0000001km(=0.0001m=0.1mm)なので
#通常の実務では問題ない精度かもしれませんが
具体例(その2)
たとえば、測地座標系の準拠楕円体は、測量法施行令の第三条で
長半径及び扁平率が以下のように定められています。
・長半径
a:6,378,137(m)
・扁平率 f:1/298.257222101
#測量法施行令:law.e-gov.go.jp/htmldata/S24/S24SE322.html
#準拠楕円体:vldb.gsi.go.jp/sokuchi/datum/tokyodatum.html#p2
#諸公式:vldb.gsi.go.jp/sokuchi/surveycalc/algorithm/ellipse/ellipse.htm
カシオのkeisanでは、演算桁数30桁で、
E(k)=1.56816414091300699428662851229
となるので全周は、
S=4*E(k)*6378137
=4*1.56816414091300699428662851229*6378137
=40007862.916921854766073335677967(m)
=40007862916.921854766073335677967(mm)
上記と同様に楕円(中心:0,0/主軸:6378.137,0/補助軸:0,6356.75231414036)の
#指数表記になるので1/1000倍(単位をkm)する
オブジェクト情報を取得すると、
_ellipse C 0,0 6378.137,0 6356.75231414036 LUNITS 2 LUPREC 8 _zoom E _list L |
さらに追加して、、、
計算精度が有効桁数で10桁しかない(と思われる)ことが、
他のコマンドにも影響している(と思える)ことも見逃しには出来ません。
楕円を
_divide で等分割された点で分割すれば、
すべての楕円弧長は同じになるはずですが、なりません。
#計算精度以外の理由(_divideか分割(_break))が影響している可能性もありますが
ちなみに、アクセサリのMicrosoft(R)電卓ですが、
4*1.56816414091300699428662851229*6378137=
上式(=まで)を電卓のメニューから貼り付けすると、
いっきに計算して結果を表示してくれます(笑)
著作権者の許可を得ていないため削除
http://www.mura.sh/bbs/wwwbbs.cgi?print+200711/07110166.txt
著作権者の許可を得ていないため削除
いつもおつき合い下さり、ありがとうございます。
#私はすっかり忘れていました
>となりました。15桁の精度が出ていますね。
え〜と、通常の計算結果に疑問があるのではありません。
オブジェクト情報(LIST)の楕円の円周(弧長)に限った話です。
#他に正確な楕円弧長を取得する方法があれば話は別です
#AutoLISPの曲線計測関数でも同程度の計算精度しかないことは確認済みです
>だから、1x1の例で示した通り、誤差というのは蓄積していくものです。
と言われますが、、、
今回の疑問は、
VBAで自作中の楕円弧長(第2種
不完全楕円積分)計算プログラムの計算結果と、
オブジェクト情報(LIST)の値を比べたことが始まりでした。
結果は、オブジェクト情報(LIST)の値とは一致せず、
カシオの高精度計算サイトの結果に有効桁数30桁程度まで
一致することを確認しました。
#確認数はそれほどありませんが、有効桁数30桁程度以下で
#一致しなかったケースはありません
>長軸 = 短軸 =
10000の楕円の円周は
特定のケースのみ計算精度が良くても、実用には無理があると思いますが。
私も長軸=短軸の楕円弧長の値を確認したことがありますが、
これは、長軸≠短軸の精度と比較して考慮すると
楕円弧では無く、円弧の処理をしているのでは?と思います。
VBAで、しかも、素人が作成した私のプログラムでさえ有効桁数30桁程度あるのに、
なぜ、AutoCADは10桁なの〜?!と疑問に思い、質問した次第です。
#ただし、時間はかかりますが
#倍精度以上を実現する為に、以下で紹介したBigInt上で作動するプログラムです
#http://www.mura.sh/bbs/wwwbbs.cgi?print+200806/08060039.txt
著作権者の許可を得ていないため削除
>「技術的には可能であるが、やっていない。」ではないでしょうか?
おっしゃりたいことは分かります。
真の楕円(弧)がオブジェクトに追加された当時のPCの性能を考えれば、
第2種
不完全楕円積分は負荷のかかる演算処理なので、
”演算速度と計算精度(桁数)トレードオフで、計算精度は10桁に抑えている”
も理解は出来るのですが、ならば、オブジェクト情報(LIST)の楕円の円周(弧長)で
と12桁も表示するのはCADとしてどうなの?と。
#AutoLISPの曲線計測関数ではあと+2桁した値(4844.22411036063)を取得できます
事情を知らないユーザーが、値を鵜呑みにしてしまっても、
自動机さんは問題ない考えているのでしょうか?
これでは、あまりにも無責任と思えるのですが。如何でしょう?
前述していますが、(計算桁数を抑えているのなら、それはいいのですが)
表示もその桁数に抑えるか、または、ユーザーに制限を告知する必要があるのでは?
と言いたいわけです。
#でも、ひょっとして、自作のプログラムが(カシオのkeisanも)間違っていて、
#オブジェクト情報(LIST)の値が正しいのかも?と考え、
#どなたかご存じの方いないかと思い、質問した次第です。
失礼
#AutoLISPの曲線計測関数ではあと+2桁した値(4844.22411036063)を取得できます
+3桁ですね。
著作権者の許可を得ていないため削除
>なら、もっと悪い条件なら5桁の精度しか出ないって事が考えられますよね?
可能性はあると思います。
>1000 + 1 - 1000 =
0
加減算の情報落ち?(正確な名を知りませんが)のことですね。
理解しているつもりです。
>内部の数値表現が15桁の精度を持っていても、計算結果の精度が10桁になる場合があっても当たり前です。
これも、言われることは理解しているつもりで、なるほど、
改めて指摘されますと、その通りとうなずくしかありません。
>と言うことが不可能であることが分かると思います。
入力条件の精度が一定しない、または、悪い条件の可能性があるので、
周長の精度(有効な桁数)は定まらない、
ということでしょうか?
一般論でなくて、
オブジェクト情報(LIST)で表示される楕円の円周に限った話で
書き込みます。
AutoCADの内部では、楕円の主要な各プロパティ値を、
倍精度(有効桁数15桁)のデータ型で格納しているはずなので、
円周の計算で必要な入力条件(の精度)は一定していると思います。
ユーザーが楕円の諸元を直接入力しているのならともかく、
オブジェクトを選択しているだけですから、
入力条件の精度で結果が異なるケースは、
通常ではあり得ません。
そうではなくて、悪い条件、たとえば、
倍精度のデータを与えてもニュートン法または展開などの収束が遅く、
決められた時間内に必要な桁数まで求まらず、
演算を途中で終了して結果を表示している、など場合などに、
当初の想定以上の”打ち切り誤差”等が生じる場合はあると思えます。
#極端に扁平な楕円、たとえば主軸と補助軸のオーダーが
#7桁(倍精度の半分)以上異なるならば可能性ありと思いますが、
#通常はその様な楕円を作図しないと思われます、で、念のため、
#長軸:10000000、補助軸:1で作図してみました
#しかしながら、無効で出来ませんでした
#通常に作成後でもプロパティ値を長径:10000000、短径:1には
#変更できませんでした(2000i)
#極端に扁平な楕円は作成できないようです
仮に、悪い条件が存在するとしても、
円周の寸法を旗揚げしたいと思うユーザーにとって、
それをどうやって知るのか?
オブジェクト情報(LIST)で表示される周長の値しか知り得ず、
打ち切り精度や有効桁数が分からないでは、
丸め位置も分からず、ユーザーは困ってしまうと思われませんか?
正しい円周を得る為には、
楕円の諸元を勘案して計算結果の有効な桁数を決めることが
ユーザーに求められているのでしょうか?
自動机さん以外は円周の計算方法を知らないので、ユーザーには、
打ち切り誤差の有無は不明で、それを正確に決めるのは無理と思えるのですが。
たとえユーザー自身が決める必要があっても、
通常のユーザーにそれを暗黙の内に求めるのは酷では?と思えるのですが、
私が知らないだけで、どこかに書いてあるのでしょうか?
私の質問を具体例で言い換えることをお許し頂けるのなら、
です。
#楕円の諸元は前述のとおり
長文失礼。
私の質問におつき合い頂いている方々や、
このトピックを飽きもせずご覧ごらん頂いている方々へ、
耳よりな情報を少々。
私がプログラミングで参考にしているハンドブックなどを紹介します。
C言語
数学関数ハンドブック (DISK BOOK 3.5″) (単行本)
C Mathematical
Function Handbook by Louis Baker
Handbook of Mathematical
Functions
特に『Handbook of
Mathematical
Functions』は英語ですが、
簡単に言えば公式集なので、それほど語学力がいるわけではありません。
PC内にダウンロードしておけば、いつでも閲覧できるのでお勧めです。
ただし、画像データなので判別しにくい箇所があるのが難ですが
『C言語
数学関数ハンドブック日本語訳版』は、
高次方程式の解(2〜4次方程式の解の複素係数対応)や
楕円積分はもちろん有りとあらゆる関数のソースがあります。
#C言語ですが、VBAしか知らない私でもかなり参考になりました
さらに追加して、、、
推測ですが、
AutoCADは、楕円弧長の計算で(楕円積分でなくて)級数展開していると思うので、
その参考例(ソース/C言語)を以下に。
コロキウム室
NO.236
著作権者の許可を得ていないため削除
>AutoCADを使っては、有効桁数を決めることは、無理です。
直線長が0になるケースは承知していますが、
たとえそうでも、実務上では寸法値を示さなければなりません。
やまらさんが妥協できる方法、または、
実際に寸法値を書きこむ時の注意している点や取り組み方などを
教えていただけませんか?
たぶん、ここをご覧の他の方々も、知りたいと思われるのですが。
または、言い換えた具体例の、
楕円の諸元(中心:0,0,0/主軸:1000,0,0/補助軸:0,500,0)で、
オブジェクト情報(LIST)で楕円の円周:4844.22411036を得たとき、
寸法値に書く値と、出来るなら根拠を示していただけませんでしょうか?
よろしくお願い致します。
#どなたか、他の方のご意見も伺いたいのですが、
#今更、他の方は書き込みにくいでしょうか?
著作権者の許可を得ていないため削除
>もし、何かを計算する時に10桁の精度が必要ならば、AutoCADには頼りません。
>というか、逆に、10桁の精度が必要な場面とはどのようなものなのですか?
では、やまらさんは、AutoCAD
Civil 3Dは使えませんね。
私は土木屋なので、公共測量で使用する平面直角座標系で10桁の精度が必要です。
#vldb.gsi.go.jp/sokuchi/datum/tokyodatum.html#p9
#vldb.gsi.go.jp/sokuchi/tky2jgd/download/Help/exuse2.htm
#例100000.0001m(測量計算上では最低0.1mmの精度が必要です)
書き込みありがとうございました。
#他の方にご意見がなければ今夕、このトピックを閉じたいのですが、
#何か他にありますでしょうか?
著作権者の許可を得ていないため削除
vldb.gsi.go.jp/sokuchi/tky2jgd/download/Help/exuse2.htm
の図にある世界測地系の平面直角座標系の座標値
(8系/北座標値193873.5315,東座標値33953.7491)
#8系は以下を参照して下さい
#座標系
表1:www.gsi.go.jp/LAW/heimencho.html
#座標系
図1:vldb.gsi.go.jp/sokuchi/datum/image/heichoku3.gif
の付近に、延長が数キロもある高速道路を計画する場合を考えてください。
現在は電子納品が義務づけられているので、
平面図の座標値は実際の値(たとえば北座標値193873.5315,東座標値33953.7491)で
作図する必要があり、任意の位置に書き込めません。
道路センターの位置を正確に計算する”線形計算”も、
必要であれば、線形計算書に記載の精度は0.1mmですし、
クロソイドの計算なども必要なので、累積誤差を考慮すると、
内部の計算精度は10桁どころか倍精度の15桁でもどうかと推測します。
が、ここで、計算できないという話は聞きませんし、
特段問題になっている風ではないので精度10桁以上で計算できているハズですが。
わかりやすく言えば、
・平面直角座標系の座標値が使用できる範囲は、その系の原点から東西130km間の範囲
(130km外は隣の座標系を使用して下さいの意です)
・縮尺係数は、誤差を少なくする為に生の座標値でなく縮尺係数を乗じる
この条件を守れば、東西130km間での範囲の誤差が1/10,000以内になります、
との意味です。
#誤差を相対的に1/10,000は、東西に約130km離れたところで、
#実際の楕円体面上距離が平面上の距離より1/10000短いの意味で、
#誤差が1/10,000以内だからといって、10桁の座標値を4桁には出来ません
当方の所有バージョンはCivil
3Dより以前の"AutoCAD Land Development Desktop R2"
なので、最新バージョンの"AutoCAD Civil 3D
2009"と多少異なるかもしれませんが、
線形計算の精度は変わらないと思います。
理解できなければ、土木では座標の精度は最低でも10桁必要と聞き流してください。
他の方のご意見も無いようなので、
申し訳ありませんが、
これにてトピックを閉じさせていただき、解決とします。
色々ありがとうございました。
色々ありがとうございました。