经检测,如下公式能做出左右方向的梯形图形。

function getPointBySq(startX,startY,startW,endX,endY,endW){
	var ED=sqr(distance(startX,startY,endX,endY))-sqr(endW-startW);
		var a=4*(sqr(startY-endY)+sqr(startX-endX));
		var b=4*(
				(
					sqr
						(
							endX-startX
						)+sqr
						(
							startW
						)-(
							sqr(
							endW
							)+ED
						)-sqr(
							endY
						)+sqr(
							startY
						)
					)*(endY-startY)-2*sqr(endX-startX)*startY
				);
		var c=sqr(sqr(endX-startX)+sqr(startW)-sqr(endW)-ED-sqr(endY)+sqr(startY))-4*sqr(endX-startX)*(sqr(startW)-sqr(startY));
		var y1=(-b- Math.sqrt(sqr(b)-4*a*c))/(2*a);
		var y2=(-b+ Math.sqrt(sqr(b)-4*a*c))/(2*a);
		var x1=Math.sqrt(sqr(startW)-sqr(y1-startY))+startX;
		var x2=Math.sqrt(sqr(startW)-sqr(y2-startY))+startX;
		var twoPoint=[[x1,y1],[x2,y2]];
		return twoPoint;
}

使用此算法无法做出上下方向的两圆之间的公切线。

由于本人工作需要,此问题算法已经停止研究了,希望能有人能解出此问题方法,或者提供更好的思路。