Javascript 两个圆之间的交点

Javascript 两个圆之间的交点,javascript,Javascript,我想做一个函数来检测两个圆之间的交点。如果是,它会得分为真,否则它会得分为假,但我想我迷路了,所以它不会显示我想要的。如果有人能帮我。非常感谢。 如果有人知道答案的话,我肯定是错误地用javascript编码了。我洗耳恭听 函数是圆形相交(c0,c1){ x0=c0['center']['x']; y0=c0['center']['y']; r0=c0['center']['r']; x1=c1['center']['x']; y1=c1['中心]['y']; r1=c1['center'][

我想做一个函数来检测两个圆之间的交点。如果是,它会得分为真,否则它会得分为假,但我想我迷路了,所以它不会显示我想要的。如果有人能帮我。非常感谢。 如果有人知道答案的话,我肯定是错误地用javascript编码了。我洗耳恭听

函数是圆形相交(c0,c1){
x0=c0['center']['x'];
y0=c0['center']['y'];
r0=c0['center']['r'];
x1=c1['center']['x'];
y1=c1['中心]['y'];
r1=c1['center']['r'];
变量a、dx、dy、d、h、rx、ry;
变量x2,y2;
/*dx和dy是两个方向之间的垂直和水平距离
*圆圈的中心。
*/
dx=x1-x0;
dy=y1-y0;
/*确定中心之间的直线距离*/
d=数学sqrt((dy*dy)+(dx*dx));
/*检查可解性*/
如果(d>(r0+r1)){
/*没有解决方案。圆不相交*/
返回false;
}
if(d
您可以这样做(查看交互式演示):

document.addEventListener('keydown'),(函数(){
函数getCircleGeometry(圆){
常数{
上图:circleTop,
左:圆圈左,
右:CirclerRight,
底部:圆形底部,
}=circle.getBoundingClientRect();
返回{
circleRadius:(circleBottom-circleTop)/2,
圆圈中心:(圆圈左+圆圈右)/2,
圆环肠:(圆环顶+圆环底)/2
}
}
函数冲突(圆圈1、圆圈2){
常数{
circleRadius:circle1Radius,
circleCenterX:circle1CenterX,
圆环肠:圆环1肠
}=getCircleGeometry(圆圈1);
常数{
circleRadius:circle2Radius,
circleCenterX:circle2CenterX,
圆环肠:圆环肠
}=getCircleGeometry(圆圈2);
const deltaX=圆形1中心-圆形2中心;
const deltaY=Circle1中心-Circle2中心;
//中心之间的距离是否小于半径之和
返回deltaX**2+deltaY**2<(圈1半径+圈2半径)**2;
}
const circle1=document.getElementById('circle1');
const circle2=document.getElementById('circle2');
设circleTop=26;
设circleLeft=8;
返回函数(e){
e、 预防默认值();
开关(如钥匙代码){
案例37://左
圆圈左-=1;
打破
案例38://以上
circleTop-=1;
打破
案例39://对
左圆圈+=1;
打破
案例40://向下
circleTop+=1;
打破
}
circle1.style.top=`${circleTop}px`;
circle1.style.left=`${circleleleft}px`;
circle1.style['background-color']=circle2.style['background-color']=collision(circle1,circle2)?'red':'blue';
}
})());
.circle{
位置:绝对位置;
边界半径:50%;
高度:20px;
宽度:20px;
}
使用键盘箭头移动圆

Javascript本机提供了一个,
此处用于计算二维系统上两点之间的距离

const圆=
[{中心:{x:10.0,y:10.0},半径:5.0}
,{中心:{x:20.0,y:20.0},半径:15.0}
,{中心:{x:20.0,y:10.0},半径:5.0}
,{中心:{x:20.0,y:25.0},半径:7.5}
] 
函数为圆形相交(c0,c1)
{
设delta_x=Math.abs(c0.center.x-c1.center.x)
,delta_y=Math.abs(c0.center.y-c1.center.y)
,dist=Math.hypot(delta_x,delta_y)
,out=(距离>(c0.半径+c1.半径))
,c0_in_c1=!out&(c1.radius>(c0.radius+dist))
,c1_in_c0=!out&(c0.radius>(c1.radius+dist))
;
返回!(输出| c0 |输入| c1 | c1 |输入| c0)
}
功能测试(名称、预期、indx_a、indx_b)
{
设test=a圆相交(圆[indx_a]、圆[indx_b])
,divTest=document.createElement('div')
,c0=圆[indx_a]
,c1=圆[indx_b]
;
divTest.className='test'
divTest.innerHTML=`

${name}
${JSON.stringify(圆圈[indx_a])绿色
${JSON.stringify(圆圈[indx_b])红色

预期:${expected}
结果: