我希望能计算一条光线和一个线段之间的交点。为此,需要构建线性方程并寻找交点。现在我在处理一个案例时遇到了数值问题。以下是我的代码缩写:
显然,返回值应该是(443.196744279195, 103.21654864924565),因为这一点在光线和线段上都相同。但是实际返回值在我的情况下是(443.19674427919506, 103.21654844284058)。
第二个数字的第六位已经出现了错误。我猜测这个错误是由于rayAX和rayBX的值非常接近所致。我的问题是:在计算交点时,我能否得到更精确的结果?
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的值非常接近所致。我的问题是:在计算交点时,我能否得到更精确的结果?