检查直线是否与带有 SVG 元素的圆相交
Checking if a line intersects a circle with SVG elements
我正在尝试用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;
};
我正在使用此堆栈交换评论中概述的方法,但没有得到任何结果。任何人都知道为什么这种方法不起作用?谢谢!
错误在于您以相反的顺序解释了二次方程。试试这个:
c = ax^2 + ay^2 - r^2;
b = 2*(ax*(bx - ax) + ay*(by - ay));
a = (bx - ax)^2 + (by - ay)^2;
然后使用这些定义继续执行其他计算。
相关文章:
- 锚点元素不't使用svg时,请打开EDGE上的href
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 在select元素中显示highchart dashstyle(svg)
- 如何自动保存动态生成的HTML SVG元素
- 使用svg和javascript将一个类的元素动画化为另一个类
- 将包含SVG元素的HTML转换为图像文件
- SVG元素——处理和选择文本
- 更改SVG'style'元素
- SVG元素在转换后会丢失事件侦听器
- 获取以屏幕像素为单位的旋转SVG元素的边界
- 使用JavaScript查找具有特定属性的SVG元素
- 如何使用正则表达式按类获取svg元素
- d3与svg在处理元素时的对比
- 是否可以在不创建svg对象的情况下创建捕捉元素?[snap.svg]
- 将SVG元素拖动到另一个SVG元素上
- 捕捉.svg — 单击其中一个元素时删除对象
- 单击事件在替换<使用>元素在<svg>(Win7/IE11)
- 我想隐藏/显示我的SVG元素,同时在anguarJS中使用它
- 在元素 SVG 中使用 JavaScript 或 jQuery 进行事件单击
- 是否有一种方法可以使用Javascript合并两个路径元素(svg)