我想計算光線和線段之間的交點。爲此我形成線性方程並尋找交點。現在我遇到一個例子的數值問題。我的代碼的縮寫:數值不準確計算交點
public class Test {
public static void main(String[] args) {
double rayAX = 443.19661703858895d;
double rayAY = 666.3485960845833d;
double rayBX = 443.196744279195d;
double rayBY = 103.21654864924565d;
double segAX = 450.0d;
double segAY = 114.42801992127828d;
double segBX = 443.196744279195d;
double segBY = 103.21654864924565d;
double a1 = (rayBY - rayAY)/(rayBX - rayAX);
double t1 = rayAY - rayAX * a1;
double a2 = (segBY - segAY)/(segBX - segAX);
double t2 = segAY - segAX * a2;
double x = (t2 - t1)/(a1 - a2);
double y = a1 * x + t1;
System.out.println(x);
System.out.println(y);
}
}
顯然回報應該是(443.196744279195,103.21654864924565),因爲這點是在光線和段都相同。 但實際回報是在我的情況(443.19674427919506,103.21654844284058)
在第二個數字中有一個錯誤已經在小數點後六位。 我想這個錯誤是因爲rayAX和rayBX的值非常接近。我的問題是:計算交叉點時可以得到更精確的結果嗎?
當你的方程組接近[單數](http://en.wikipedia.org/wiki/Invertible_matrix)時,數值問題總是可能的。 – 2014-11-22 22:12:19