このページについて
 
このページは、mura's homeAutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
http://www.mura.sh/bbs/wwwbbs.cgi?print+200903/09030182.txt
 
タイトルおよび質問内容は上記より引用しています。
 
引用した質問内容は、バックカラーが

   

となっています。
 
当方の発言は、バックカラーが

   

となっています。
 
その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています
 
また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、
ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
 
 
掲示板の著作権について
 
掲示板への匿名の書き込みであっても、著作権(著作権法)で保護されています。
また、判例(確定した判決)もあります。
 
裁判所 判例検索システム

ホテルジャンキーズ事件

知的財産裁判例
知的財産裁判例
平成13(ワ)22066  著作権 民事訴訟
平成14年04月15日 東京地方裁判所
全文 控訴
付帯控訴
知的財産裁判例
知的財産裁判例
平成14(ネ)2887  著作権 民事訴訟
平成14年10月29日 東京高等裁判所
全文 確定

ただし、あらかじめ取り決めがある場合は、その取り決めが優先します
 ※たとえば、OKWave の掲示板 (利用規約/第10条(投稿内容の利用権))

 
 
 

楕円の弧長について

kamegai [HOMEPAGE] 2009/03/29(日) 11:44:49

オブジェクト情報(LIST)で表示される楕円の円周(弧長)が
他で求めた値と(有効数字で11桁目以降が)異なるのですが、
精度は有効数字10桁程度ということでしょうか?

kamegai [HOMEPAGE] 2009/03/29(日) 11:45:31

具体例

楕円(中心: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

|有効数字で11桁目以降(小数点以下7桁以降)が異なる

kamegai [HOMEPAGE] 2009/03/29(日) 11:54:39

おや、 /pre タグが利かない?!同じ行だとNG?

同じ行に pre と /pre タグのテスト
ここは pre タグの中
ここは /pre タグの次行

やまら 2009/03/29(日) 18:37:33

著作権者の許可を得ていないため削除
http://ja.wikipedia.org/wiki/åç²¾åº¦
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/30(月) 07:01:11

>根拠の無い直感ですけど、10桁ならば、そんなものかなと思ってしまう。
有効桁数で最大15桁(倍精度)は、
ユーザーが当然に期待する精度だと思うのですが、15桁は期待しすぎ?


AutoCADの(楕円弧長の)計算精度が10桁ならば、それはそれで仕方がないですが、
それなら、長さの精度(LUPREC)にかかわらず、オブジェクト情報(LIST)で表示される
楕円弧長のみは表示桁数を有効桁数で最大10桁(または11桁)までとするか、
仕様で計算精度をユーザーに告知する必要があるのでは?と思います。


これでは、オブジェクト情報の値をそのままで寸法値に使用できません。
#上記の単位をkmとすると4844.22411036kmの0.0000001km(=0.0001m=0.1mm)なので
#通常の実務では問題ない精度かもしれませんが

kamegai [HOMEPAGE] 2009/03/30(月) 07:01:58

具体例(その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
|赤道短半径bと楕円積分パラメータk
|b=a(1-f)
| =6378137(1-(1/298.257222101))
| =6356752.3141403558478521068615295(m)
|k=√M
| =√{(a^2-b^2)/(a^2)}
| =√(2f-f^2)
| =√{(2*(1/298.257222101)-(1/298.257222101)^2)}
| =√0.006694380022900787625359114702799
| =0.081819191042815790145895739889329
|注)ellipse.htm ではMはe

カシオの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 

#新規図面でどうぞ(最後のLの後にスペース2つ)
・円周: 40007.86291713 (km=40007862.91713m=40007862917.13mm)
で、約0.2mmの誤差(有効数字で11桁目以降が異なる)を確認できる。


楕円弧長は、直線長や円弧長と異なり、
ユーザーが簡単に算出(確認)できる値ではないので、
計算精度が10桁しかないにもかかわらず12桁目以降も表示するのは、
CADとして問題の元となる動作と思えるのですが、
みなさんは如何思われますでしょうか?

#今回の例は全周長なので、第2種 完全楕円積分さえ出来れば簡単に計算できますが、
#楕円弧長だと第2種 不完全楕円積分(完全より厄介)が2回(始終点の差)も必要で、
#角度も基準位置(12時と3時)や円に投影した角度か否かでAutoCADと異なるので
#カシオのkeisan(または不完全楕円積分が可能なプログラム)で計算させるにしても
#手間がかかります。

#各数式の計算はアクセサリのMicrosoft(R)電卓を使用

kamegai [HOMEPAGE] 2009/03/30(月) 07:02:50

さらに追加して、、、
計算精度が有効桁数で10桁しかない(と思われる)ことが、
他のコマンドにも影響している(と思える)ことも見逃しには出来ません。


楕円を _divide で等分割された点で分割すれば、
すべての楕円弧長は同じになるはずですが、なりません。
#計算精度以外の理由(_divideか分割(_break))が影響している可能性もありますが

|スプラインの場合はさらに精度が悪く有効数字5桁程度(と思われます)

kamegai [HOMEPAGE] 2009/03/30(月) 07:19:15

ちなみに、アクセサリのMicrosoft(R)電卓ですが、
4*1.56816414091300699428662851229*6378137=
上式(=まで)を電卓のメニューから貼り付けすると、
いっきに計算して結果を表示してくれます(笑)

やまら 2009/03/30(月) 09:29:16

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
http://www.mura.sh/bbs/wwwbbs.cgi?print+200711/07110166.txt
 
 

やまら 2009/03/30(月) 09:44:52

著作権者の許可を得ていないため削除
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/30(月) 10:59:46

いつもおつき合い下さり、ありがとうございます。
#私はすっかり忘れていました


>となりました。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

おっ? 2009/03/30(月) 11:12:29

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/30(月) 12:05:48

>「技術的には可能であるが、やっていない。」ではないでしょうか?
おっしゃりたいことは分かります。

真の楕円(弧)がオブジェクトに追加された当時のPCの性能を考えれば、
第2種 不完全楕円積分は負荷のかかる演算処理なので、
”演算速度と計算精度(桁数)トレードオフで、計算精度は10桁に抑えている”
も理解は出来るのですが、ならば、オブジェクト情報(LIST)の楕円の円周(弧長)で
|円周: 4844.22411036
と12桁も表示するのはCADとしてどうなの?と。
#AutoLISPの曲線計測関数ではあと+2桁した値(4844.22411036063)を取得できます
事情を知らないユーザーが、値を鵜呑みにしてしまっても、
自動机さんは問題ない考えているのでしょうか?
これでは、あまりにも無責任と思えるのですが。如何でしょう?


前述していますが、(計算桁数を抑えているのなら、それはいいのですが)
表示もその桁数に抑えるか、または、ユーザーに制限を告知する必要があるのでは?
と言いたいわけです。


#でも、ひょっとして、自作のプログラムが(カシオのkeisanも)間違っていて、
#オブジェクト情報(LIST)の値が正しいのかも?と考え、
#どなたかご存じの方いないかと思い、質問した次第です。

kamegai [HOMEPAGE] 2009/03/30(月) 12:07:50

失礼
#AutoLISPの曲線計測関数ではあと+2桁した値(4844.22411036063)を取得できます
+3桁ですね。

やまら 2009/03/30(月) 23:04:31

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/31(火) 08:47:49

>なら、もっと悪い条件なら5桁の精度しか出ないって事が考えられますよね?
可能性はあると思います。

>1000 + 1 - 1000 = 0
加減算の情報落ち?(正確な名を知りませんが)のことですね。
理解しているつもりです。

>内部の数値表現が15桁の精度を持っていても、計算結果の精度が10桁になる場合があっても当たり前です。
これも、言われることは理解しているつもりで、なるほど、
改めて指摘されますと、その通りとうなずくしかありません。

>と言うことが不可能であることが分かると思います。
入力条件の精度が一定しない、または、悪い条件の可能性があるので、
周長の精度(有効な桁数)は定まらない、
ということでしょうか?


一般論でなくて、
オブジェクト情報(LIST)で表示される楕円の円周に限った話で
書き込みます。

AutoCADの内部では、楕円の主要な各プロパティ値を、
倍精度(有効桁数15桁)のデータ型で格納しているはずなので、
円周の計算で必要な入力条件(の精度)は一定していると思います。
ユーザーが楕円の諸元を直接入力しているのならともかく、
オブジェクトを選択しているだけですから、
入力条件の精度で結果が異なるケースは、
通常ではあり得ません。

そうではなくて、悪い条件、たとえば、
倍精度のデータを与えてもニュートン法または展開などの収束が遅く、
決められた時間内に必要な桁数まで求まらず、
演算を途中で終了して結果を表示している、など場合などに、
当初の想定以上の”打ち切り誤差”等が生じる場合はあると思えます。
#極端に扁平な楕円、たとえば主軸と補助軸のオーダーが
#7桁(倍精度の半分)以上異なるならば可能性ありと思いますが、
#通常はその様な楕円を作図しないと思われます、で、念のため、
#長軸:10000000、補助軸:1で作図してみました
#しかしながら、無効で出来ませんでした
#通常に作成後でもプロパティ値を長径:10000000、短径:1には
#変更できませんでした(2000i)
#極端に扁平な楕円は作成できないようです

仮に、悪い条件が存在するとしても、
円周の寸法を旗揚げしたいと思うユーザーにとって、
それをどうやって知るのか?
オブジェクト情報(LIST)で表示される周長の値しか知り得ず、
打ち切り精度や有効桁数が分からないでは、
丸め位置も分からず、ユーザーは困ってしまうと思われませんか?

正しい円周を得る為には、
楕円の諸元を勘案して計算結果の有効な桁数を決めることが
ユーザーに求められているのでしょうか?

自動机さん以外は円周の計算方法を知らないので、ユーザーには、
打ち切り誤差の有無は不明で、それを正確に決めるのは無理と思えるのですが。
たとえユーザー自身が決める必要があっても、
通常のユーザーにそれを暗黙の内に求めるのは酷では?と思えるのですが、
私が知らないだけで、どこかに書いてあるのでしょうか?


私の質問を具体例で言い換えることをお許し頂けるのなら、
|オブジェクト情報(LIST)で楕円の円周:4844.22411036を得た。
|この値には誤差が含まれていると思われるので
|寸法に誤差を除いた値を書き込みたいが、その値は?
です。
#楕円の諸元は前述のとおり

長文失礼。

kamegai [HOMEPAGE] 2009/03/31(火) 08:48:54

私の質問におつき合い頂いている方々や、
このトピックを飽きもせずご覧ごらん頂いている方々へ、
耳よりな情報を少々。

私がプログラミングで参考にしているハンドブックなどを紹介します。

C言語 数学関数ハンドブック (DISK BOOK 3.5″) (単行本)
|Louis Baker (著), 吉田 弘一郎 (翻訳)
|『C Mathematical Function Handbook』の日本語訳版
|出版社 : 技術評論社 [gihyo.jp/book]
|ISBN-10: 487408544X
|ISBN-13: 978-4874085448
|※絶版と思われますが、通常、図書館に所蔵されています
|※記載のプログラムソース(FDのデータも)の一部には誤植(間違い)がありますので、
| 実際の使用には、各自演算結果の検証をする必要があります
|※残念ながら技術評論社のHPで正誤表を見つけられませんでした

C Mathematical Function Handbook by Louis Baker
|Handbook of mathematical functions』に載っているすべての関数に対して、
|それを計算する試験済みのアルゴリズムの集大成

Handbook of Mathematical Functions
|Edited by Milton Abramowitz and Irene A. Stegun
|3.8. Algebraic Equations
|※現在も安価に入手可能のハズです
|※このハンドブックは、アメリカの政府職員が公式の立場で作成した成果なので、
| (アメリカの)著作権法で保護されていません(とのことです)
|※以下から画像データをダウンロード(圧縮:tar.gz)できます
| www.math.sfu.ca/~cbm/aands/

特に『Handbook of Mathematical Functions』は英語ですが、
簡単に言えば公式集なので、それほど語学力がいるわけではありません。
PC内にダウンロードしておけば、いつでも閲覧できるのでお勧めです。
ただし、画像データなので判別しにくい箇所があるのが難ですが

『C言語 数学関数ハンドブック日本語訳版』は、
高次方程式の解(2〜4次方程式の解の複素係数対応)や
楕円積分はもちろん有りとあらゆる関数のソースがあります。
#C言語ですが、VBAしか知らない私でもかなり参考になりました


さらに追加して、、、
推測ですが、
AutoCADは、楕円弧長の計算で(楕円積分でなくて)級数展開していると思うので、
その参考例(ソース/C言語)を以下に。
コロキウム室 NO.236
|NO.1741 楕円積分に関する”3種の勘違い” 標準形 2008.10.1.
|www.junko-k.com/collo/collo236.htm#1741
|※第2種 不完全楕円積分を級数展開で求めるソース(C言語)
|※当方のBigIntに移植したところ10桁の精度を確認出来ました
| (確認例は少ないです/初期条件のm=7→16としました)
|※精度は多くとれませんが、演算時間がかかりません

やまら 2009/03/31(火) 10:34:40

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/31(火) 11:53:37

>AutoCADを使っては、有効桁数を決めることは、無理です。
直線長が0になるケースは承知していますが、
たとえそうでも、実務上では寸法値を示さなければなりません。
やまらさんが妥協できる方法、または、
実際に寸法値を書きこむ時の注意している点や取り組み方などを
教えていただけませんか?
たぶん、ここをご覧の他の方々も、知りたいと思われるのですが。


または、言い換えた具体例の、
楕円の諸元(中心:0,0,0/主軸:1000,0,0/補助軸:0,500,0)で、
オブジェクト情報(LIST)で楕円の円周:4844.22411036を得たとき、
寸法値に書く値と、出来るなら根拠を示していただけませんでしょうか?
よろしくお願い致します。


#どなたか、他の方のご意見も伺いたいのですが、
#今更、他の方は書き込みにくいでしょうか?

やまら 2009/03/31(火) 12:54:11

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/31(火) 13:37:18

>もし、何かを計算する時に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の精度が必要です)

書き込みありがとうございました。


#他の方にご意見がなければ今夕、このトピックを閉じたいのですが、
#何か他にありますでしょうか?

やまら 2009/03/31(火) 15:05:53

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2009/03/31(火) 16:54:16

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桁以上で計算できているハズですが。
|AutoCAD Civil 3Dはこのような線形計算などの土木設計専用ソフトです


|平面直角座標系は、
|投影距離の誤差を相対的に1/10,000以内に収めるよう
|座標原点に縮尺係数(0.9999)を与え、かつ、
|座標原点より東西130km(縮尺係数(0.0001))以内を適用範囲とした座標系
わかりやすく言えば、
・平面直角座標系の座標値が使用できる範囲は、その系の原点から東西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桁必要と聞き流してください。

kamegai [HOMEPAGE] 2009/03/31(火) 17:06:00

他の方のご意見も無いようなので、
申し訳ありませんが、
これにてトピックを閉じさせていただき、解決とします。

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

kamegai [HOMEPAGE] 2009/03/31(火) 17:08:55

≪ 解決 ≫

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