{
const [motor0, motor1, motor2, target] = nodes;
const dom = html`
<svg class="main-chart" viewBox="0 0 400 200">
<g>
<line id="line0" x1="${motor0.fx}" y1="${motor0.fy}" x2="${motor1.fx}" y2="${motor1.fy}" style="stroke:rgb(255,0,0, 0.4);stroke-width:2" />
<line id="line1" x1="${motor1.fx}" y1="${motor1.fy}" x2="${motor2.fx}" y2="${motor2.fy}" style="stroke:rgb(255,0,0, 0.4);stroke-width:2" />
<circle
id="motor0"
r="${motor0.r}"
cx="${motor0.x}"
cy="${motor0.y}"
fill="rgba(255, 0, 0, 0.7)"
/>
<circle
id="motor1"
r="${motor1.r}"
cx="${motor1.x}"
cy="${motor1.y}"
fill="rgba(0, 255, 255, 0.7)"
/>
<circle
id="motor2"
r="${motor2.r}"
cx="${motor2.x}"
cy="${motor2.y}"
fill="rgba(0, 255, 0, 0.7)"
/>
<circle id="target" r="${target.r}" cx="${target.x}" cy="${target.y}" fill="rgba(0, 0, 255, 0.5)" />
</g>
</svg>`;
const vMotor0 = dom.querySelector("#motor0");
const vMotor1 = dom.querySelector("#motor1");
const vMotor2 = dom.querySelector("#motor2");
const vLine0 = dom.querySelector("#line0");
const vLine1 = dom.querySelector("#line1");
const vTarget = dom.querySelector("#target");
drag(target)(d3.select(vTarget));
while (true) {
let [newM1Pos, newM2Pos] = updatePos(target);
motor1.fx = newM1Pos[0];
motor1.fy = newM1Pos[1];
motor2.fx = newM2Pos[0];
motor2.fy = newM2Pos[1];
vTarget.setAttribute("cx", target.fx);
vTarget.setAttribute("cy", target.fy);
vMotor0.setAttribute("cx", motor0.fx);
vMotor0.setAttribute("cy", motor0.fy);
vMotor1.setAttribute("cx", motor1.fx);
vMotor1.setAttribute("cy", motor1.fy);
vMotor2.setAttribute("cx", motor2.fx);
vMotor2.setAttribute("cy", motor2.fy);
vLine0.setAttribute("x2", motor1.fx);
vLine0.setAttribute("y2", motor1.fy);
vLine1.setAttribute("x1", motor1.fx);
vLine1.setAttribute("y1", motor1.fy);
vLine1.setAttribute("x2", motor2.fx);
vLine1.setAttribute("y2", motor2.fy);
yield dom;
}
}