我正在尝试在JS中编写给定SVG直线和圆的函数,该函数将确定该直线是否与该圆相交。但是,我认为由于SVG坐标系而出现问题。我编写的函数如下:
var inCircle = function(ax, ay, bx, by, cx, cy, r) {
// put circle at the center to simplify calcs
ax -= cx; ay -= cy;
bx -= cx; by -= cy;
a = ax^2 + ay^2 - r^2;
b = 2*(ax*(bx - ax) + ay*(by - ay));
c = (bx - ax)^2 + (by - ay)^2;
// get discriminant
disc = b^2 - 4*a*c;
// check if discriminant has real values
if(disc <= 0) return false;
// find intersection points
sqrtdisc = Math.sqrt(disc);
t1 = (-b + sqrtdisc)/(2*a);
t2 = (-b - sqrtdisc)/(2*a);
if(0 < t1 && t1 < 1 && 0 < t2 && t2 < 1) return true;
return false;
};
我正在使用此stackexchange comment中概述的方法,但未得到任何结果。任何人都知道为什么这种方法行不通?谢谢!
最佳答案
错误是您以相反的顺序解释了二次方程。尝试以下方法:
c = ax^2 + ay^2 - r^2;
b = 2*(ax*(bx - ax) + ay*(by - ay));
a = (bx - ax)^2 + (by - ay)^2;
然后继续使用这些定义进行其他计算。
关于javascript - 检查直线是否与SVG元素相交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28951362/