Javascript SVG路径没有';我似乎不能正确地定位自己

Javascript SVG路径没有';我似乎不能正确地定位自己,javascript,svg,d3.js,Javascript,Svg,D3.js,我试图在两个圆圈周围生成一条路径,当我移动它们时,这两个圆圈应该跟随它们。我是基于一个我发现的例子,并构建了一个我期望实现的原型 我已经开始在我的应用程序中包括这一点,但由于某些原因,我似乎无法获得围绕正确位置绘制的绿色路径,我也不知道为什么 我用一个代码示例来说明: 函数生成路径(行星、月亮、连接){ 函数之间的距离(x1,y1,x2,y2){ 变量a=(x2-x1)*(x2-x1); var b=(y2-y1)*(y2-y1); 返回Math.sqrt(a+b); }; 函数circle

我试图在两个圆圈周围生成一条路径,当我移动它们时,这两个圆圈应该跟随它们。我是基于一个我发现的例子,并构建了一个我期望实现的原型

我已经开始在我的应用程序中包括这一点,但由于某些原因,我似乎无法获得围绕正确位置绘制的绿色路径,我也不知道为什么

我用一个代码示例来说明:

函数生成路径(行星、月亮、连接){
函数之间的距离(x1,y1,x2,y2){
变量a=(x2-x1)*(x2-x1);
var b=(y2-y1)*(y2-y1);
返回Math.sqrt(a+b);
};
函数circleYFromX(圆,x){
返回Math.sqrt(Math.pow(circle.r,2)-Math.pow(x-circle.x,2));
};
函数计算角度(原点、点){
var tan=(point.y-origin.y)/(point.x-origin.x);
var angle=Math.atan(tan)/Math.PI*180+90;
如果(点x<原点x)角度+=180;
返回角;
};
//算出月球和行星之间的距离
var distance=距离(planet.x,planet.y,moon.x,moon.y);
var originDistance=行星.r-月亮.r;
var distanceDiff=距离-原始距离;
if(距离差<1){
距离差=1;
}
控制台日志(距离);
控制台日志(planet.r);
控制台日志(moon.r);
console.log(join.r);
console.log(planet.r+moon.r+2*join.r);
//确定月球是否已经脱离了行星的引力
如果(距离>2*join.r+planet.r+moon.r){
返回;
}
月h=0;
月亮.k=0-行星.r+月亮.r-距离差;
var triangleA=planet.r+join.r;//侧面行星
var triangleB=moon.r+join.r;//侧月
var triangelec=Math.abs(moon.k-0);//c面
var triangleP=(triangleA+triangleB+triangleC)/2;//三角形半周长
var triangleea=Math.sqrt(triangleP*(triangleP-triangleA)*(triangleP-triangleB)*(triangleP-triangleC));//三角形区域
三角帆;
三角化;
如果(三角形>=三角形){
var triangleH=2*triangleArea/triangelec;//三角形高度
var triangleD=Math.sqrt(Math.pow(triangleA,2)-Math.pow(triangleH,2));//三角形的大圆对分
}否则{
var triangleH=2*triangleArea/triangleA;//三角形高度
var triangeled=Math.sqrt(Math.pow(triangelec,2)-Math.pow(triangeleh,2));//三角形的小圆二等分
}
planet.tan=三角形/三角形;
planet.angle=Math.atan(planet.tan);
planet.sin=Math.sin(planet.angle);
planet.intersectX=planet.sin*planet.r;
planet.cos=数学cos(planet.angle);
planet.intersectY=planet.cos*planet.r;
join.x=0+planet.sin*(planet.r+join.r);
join.y=0-planet.cos*(planet.r+join.r);
变量coord1={
x:-planet.x,
y.相交
};
变量coord2={
x:planet.x,
y.相交
}
moon.tan=(moon.k-join.y)/(moon.h-join.x);
moon.angle=Math.atan(moon.tan);
moon.intersectX=join.x-Math.cos(月亮角度)*(join.r);
moon.intersectY=join.y-Math.sin(月亮角度)*(join.r);
//如果我们有任何错误的值,那么就不返回路径
if(isNaN(coord1.x)| isNaN(coord1.y)| isNaN(coord2.x)| isNaN(coord2.y)){
返回;
}
var pathD=“M”+coord1.x+“”+coord1.y+“A”+planet.r+“”+planet.r+“0110”+coord2.x+“”+coord2.y;

if(join.x-join.r不幸的是,我在代码末尾缺少了一个
translate
rotate
,这是我之前因为某种原因错过的。在中包含了这一点,使它按预期工作。

快速浏览一下,我注意到的一件事是,示例绘制了路径并将其旋转以包围“月亮”。你不做这个旋转。加上它可以改善你的问题,但角度似乎偏离了月亮的半径。@Mark:你知道吗,我一直很愚蠢。你说得对,它确实会平移,但我不知怎么错过了。这是一个有趣的第一步,我也许能找出它为什么会被偏移。