• ベストアンサー

三角形の面積・・・ヘロンと座標法答えが違う?

ただいま仕事で展開図を作っています。 そこで三角形の面積を求めるのにヘロンの公式を使っていますが 座標法で求めたものと数値が違います。 座標法での計算式は http://www.hat.hi-ho.ne.jp/sokubou/mensekirei.htm のURLにあるやりかたです。 なお座標は、CAD上で読み取った簡易的なものです。 ヘロンの公式と、座標法ならどちらの方が真値に近いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • fukkyse
  • ベストアンサー率32% (130/402)
回答No.8

#5.6です。回答する前に閉じられては…と思い、#6の回答は大急ぎだったので補足を。 誤差はあると思ってはいたのですが、検証したことがなかったので良い機会だと思い、実験してみました。 先ほどの回答、辺長A=0.9、辺長B=2.6、辺長C=2.491が検証の基準です。 座標点b:2.337,717.861 は、8桁では 座標点b:2.33751558,717.86087277 この時点で、誤差はしょうがないと諦めなければ仕方ありません。計算結果は先の回答。 この図形を縦横ともに1000倍し、結果を1000000で割った場合 座標計算値は:1.11913460214394となり、ヘロンの公式との差が大きくつめられました。 ↑必要な精度によっては、このような手法も考えられるという例です。 先ほどの0.3-0.2-0.1+0の例は、コンピュータでの計算には誤差が必ずあるので、信頼できる範囲に限りがあるということです。0.1という十進数は二進ではありえない数値です。参考は、 http://pc.nikkeibp.co.jp/pc21/special/gosa/index.shtml ヘロンの公式については、Excelにて A,B,C列に各辺の値 D列:=IF(OR(A6="",B6="",C6=""),"",SUM(A6:C6)/2) E列:=IF(ISNUMBER(D6),(D6*(D6-A6)*(D6-B6)*(D6-C6))^0.5,"") として計算しております。余分なIF関数と、6行目から始まっていることは、こちらの既存ファイルからのコピーですのでお許しを…。

NOBBB
質問者

お礼

何度もありがとうございます。 検証までしていただき本当に感謝です。 余談の話が大きく膨らんだ気がしますが きのせいですねw 今後の勉強になりました^^

その他の回答 (7)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.7

>>=0.3-0.2-0.1+0 >不思議なことをエクセル君言っております。 >-2.7756E-17??? 有理数を2進数に置き換える時に、誤差が生じてしまうからです。 excelでのその過程を概説しているページを見つけたので。 http://oku.edu.mie-u.ac.jp/~okumura/software/excel/roundoff.html これを、きちんと計算するには、10進演算プログラムというものが必要です。 BCD(2進化10進数,つまり2進の計算機での10進法のエミュレーション)とも言われます。 概念的には、各桁毎に変数を用意してそれぞれ0~9のみを入れて、筆算をするごとく、一個ずつ計算して、答え用の各桁用変数にデータを入れていくといったイメージです。 しかし、計算時間が長くなるので、科学計算とか、お金を扱うプログラムなど、精度管理の重要なものに使われます。 phyton用だけど演算方式の違いの説明が載ってるページ http://www.python.jp/doc/release/lib/module-decimal.html プログラマーでないなら細かいところは必要ないですけど、どのプログラムで計算させるかの参考程度に述べてみました。

NOBBB
質問者

お礼

回答ありがとうございます。 エクセルの勉強になります^^ ちと難しいですが、勉強してみます。

  • fukkyse
  • ベストアンサー率32% (130/402)
回答No.6

#5です。#4様へのお礼を拝見いたしましたが、 ヘロンの公式間違えていませんか? 辺長A=0.9 辺長B=2.6 辺長C=2.491 を元に計算した結果 座標での計算:1.11913460100002 ヘロンの公式:1.11913460214352 キャドデータ:1.11913460 となりましたが。

NOBBB
質問者

お礼

ぬあ^^; 恐れていたことが・・・ 申し訳ありません。 何度もありがとうございます。

  • fukkyse
  • ベストアンサー率32% (130/402)
回答No.5

>PCを使う以上避けては通れない道ですかね^^; そのとおりだと思います。 座標法、ヘロンともに面積計算に利用しています。 誤差を少なくするために、座標抽出は、CAD側にて小数点以下8桁として行い、抽出データをExcelに貼り付けて計算しています。やっている感じとしては、CADから辺長を抽出し「ヘロンの公式」で行ったほうが、やや正確な気がしますが、作業効率を考えると圧倒的に座標計算です。計算結果とCADのオブジェクトデータ(これも抽出し貼り付け)を比較して、小数点以下○位の四捨五入で=ならば"OK"という判定で検算しております。 ※使用CAD:AutoCADLT2000、Excel2000 コンピュータに限らず計算には誤差はつき物なので、どれだけの精度が必要か?という部分の吟味が必要だと思います。 余談ですが、Excelにて=0.3-0.2-0.1+0を計算してみてください。あれ?

NOBBB
質問者

お礼

回答ありがとうございます^^ 詳しい検算の方法まで教えていただいて感謝です♪ 試しにやってみました>=0.3-0.2-0.1+0 不思議なことをエクセル君言っております。 -2.7756E-17??? エクセル君どうしたのでしょうか??? これが有効桁数とかの関連で出る結果なのですか? (バグではないんですよね?)

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.4

>PCを使う以上避けては通れない道ですかね^^; 仰有るとおりです。ただ両者の違いはほんの僅かの筈で、実害のない程度のものではないのでしょうか? よほど精密な仕事ではない限り、有効数字3桁もあれば上等の場合が殆どなので、多少の食い違いには目をつぶるということも大切なのかも知れませんね。

NOBBB
質問者

お礼

度々ありがとうございます。 >実害のない程度のものではないのでしょうか? たしかに実害はない程度のものです。 (困り度も「暇なとき・・・」ですしw) ただ、小数点以下1位でずれていたので え?! と思ったまでです。 例: 辺長A=0.9 辺長B=2.6 辺長C=2.491 ~~座標~~   X   Y a=2.337 717.861 b=2.600 717.000 c=0.000 717.000 というものですと答えが ヘロン・・1.2524 座標・・・1.1193 となるのです。(計算間違いしてないと思いますが・・・) それでどちらが一番最もらしい値なのかなぁと思っていました^^;

  • kaduno
  • ベストアンサー率21% (130/592)
回答No.3

#2です。 >ご回答がイメージできません。 適当な直角三角形で説明しますと  A(0,2)  |\ c| \b  |  \  B----C  (0,0) a (1,0) ・a辺(BC辺)はX軸と水平で長さが1 ・c辺(AB辺)はY軸と水平で長さが2 その場合、 b辺(AC辺)は長さが√5で無理数になりますので、各辺の長さから解を求めるヘロンの公式では、途中の計算でズレが生じます。

NOBBB
質問者

お礼

度々ありがとうございます。 確かに√5では延々と続いていきますもんね^^ そりゃ~ずれますね^^; おかげでわかりました^^

  • kaduno
  • ベストアンサー率21% (130/592)
回答No.2

ヘロンの公式を用いて三角形ABCの面積を求めた場合、仮にa辺を下にしてX軸と水平にした場合、b,c辺の値が無理数になる場合がありますよね。 その値とコンピューターの有効数字のズレではないでしょうか。

NOBBB
質問者

お礼

回答ありがとうございます。 数学のカテに質問しておきながら、数学苦手でして 大変申し訳ないのですが、ご回答がイメージできません。 >b,c辺の値が無理数になる場合がありますよね ↑このくだり;; 申し訳ありませんが、お手すきのときで構いませんので もう少し砕いた表現にしていただると助かります。

  • Willyt
  • ベストアンサー率25% (2858/11131)
回答No.1

 コンピュータでプログラムされているのでしょうか。アルゴリズムと入力データが同じなら結果は同じ筈です。ヘロンの公式を使うには座標値から三角形の長さを計算しなければなりませんね。そこで間違いが起きているのではないでしょうか?  誤差の問題だとすればこれはかなり複雑ですね。コンピュ-タで生じるのは桁落ちの誤差ですが、これは計算の過程、データの桁に左右されるので何とも言えません。 例えば4桁しか扱えないコンピュ-タがあったとして 1000-0.1は1000になってしまいますよね? そんな感じです。

NOBBB
質問者

お礼

回答ありがとうございます。 私もやっぱりそんな気はしてました^^;<桁落ち ちなみに私はプログラムしていません^^; CAD上で面積計ったのと(CADに面積計らせる)、ヘロンで計算したものが違っていたので 検算(でいいのかな?)ができなくて 結局何が正しいのか分からなくなり質問しました。 PCを使う以上避けては通れない道ですかね^^;

関連するQ&A