【发布时间】:2014-11-22 22:09:10
【问题描述】:
我想计算射线和线段之间的交点。为此,我形成线性方程并寻找交点。现在我遇到一个例子的数值问题。我的代码的缩写:
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 的值非常接近。我的问题是:在计算交点时,我能得到更精确的结果吗?
【问题讨论】:
-
当您的方程组接近 singular 时,总是可能出现数值问题。
标签: java geometry intersection numeric