JavaScriptの数値計算誤差で悩む(図形の内外判定) [HTML/CSS/JavaScript]
地図上の任意の点があるある特定の範囲内かを判定するスクリプトを、「点の多角形に対する内外判定」をそのまま使用させて戴き、JavaScriptで実装しました。しかし特定の形状時のみ判定結果が間違う結果となることが判明。色々考えたが原因が不明、困ってしまって初心に戻り同じ計算をExcel表にて実施し、順番にJavaScriptとExcelの結果を比較することで、漸く原因が判明しました。"考えるより手を動かせ!"ですね。
【原因】
このif文の結果がExcelの結果と異なるために誤判定となることが判明
if(point.x < (polygon.v[i].x + (vt * (polygon.v[i+1].x - polygon.v[i].x)))){
右辺のvt * (polygon.v[i+1].x - polygon.v[i].x))が十分小さいと、計算誤差により情報落ちが発生してvt * (polygon.v[i+1].x - polygon.v[i].x))分が無くなってしまいif判定が逆転し内外判定に誤りが生じることが判明。
【対策】
数値計算JavaScriptライブラリの利用も考えたたが、とりあえず以下の方法にて対処しました。
if(point.x - polygon.v[i].x) < (vt * (polygon.v[i+1].x - polygon.v[i].x))){
そういえば、その昔数値計算の誤差で習ったような記憶が。。
【原因】
このif文の結果がExcelの結果と異なるために誤判定となることが判明
if(point.x < (polygon.v[i].x + (vt * (polygon.v[i+1].x - polygon.v[i].x)))){
右辺のvt * (polygon.v[i+1].x - polygon.v[i].x))が十分小さいと、計算誤差により情報落ちが発生してvt * (polygon.v[i+1].x - polygon.v[i].x))分が無くなってしまいif判定が逆転し内外判定に誤りが生じることが判明。
【対策】
数値計算JavaScriptライブラリの利用も考えたたが、とりあえず以下の方法にて対処しました。
if(point.x - polygon.v[i].x) < (vt * (polygon.v[i+1].x - polygon.v[i].x))){
そういえば、その昔数値計算の誤差で習ったような記憶が。。
2019-06-23 15:17
nice!(0)
コメント(0)
コメント 0