function common_tangent_line(x1, y1, r1, x2, y2, r2) {
let delta1 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) - (r1 + r2) * (r1 + r2);
let delta2 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) - (r1 - r2) * (r1 - r2);
let p1 = r1 * (x1 * x2 + y1 * y2 - x2 * x2 - y2 * y2);
let p2 = r2 * (x1 * x1 + y1 * y1 - x1 * x2 - y1 * y2);
let q = x1 * y2 - x2 * y1;
let results = [];
if(delta1 >= 0) {
let l11 = {
a: (x2 - x1) * (r1 + r2) + (y1 - y2) * Math.sqrt(delta1),
b: (y2 - y1) * (r1 + r2) + (x2 - x1) * Math.sqrt(delta1),
c: p1 + p2 + q * Math.sqrt(delta1)
};
let l12 = {
a: (x2 - x1) * (r1 + r2) - (y1 - y2) * Math.sqrt(delta1),
b: (y2 - y1) * (r1 + r2) - (x2 - x1) * Math.sqrt(delta1),
c: p1 + p2 - q * Math.sqrt(delta1)
};
results.push(l11);
results.push(l12);
}
if(delta2 >= 0) {
let l21 = {
a: (x2 - x1) * (r1 - r2) + (y1 - y2) * Math.sqrt(delta2),
b: (y2 - y1) * (r1 - r2) + (x2 - x1) * Math.sqrt(delta2),
c: p1 - p2 + q * Math.sqrt(delta2)
};
let l22 = {
a: (x2 - x1) * (r1 - r2) - (y1 - y2) * Math.sqrt(delta2),
b: (y2 - y1) * (r1 - r2) - (x2 - x1) * Math.sqrt(delta2),
c: p1 - p2 - q * Math.sqrt(delta2)
};
results.push(l21);
results.push(l22);
}
return results;
}