trajectory_manipulate = manipulate({
this: this,
viewofData: viewof x_trajectory,
viewofPlot: viewof plot_trajectory,
invalidation,
onInteraction: ({
event,
pixelStart,
pixelCurrent,
dataStart,
dataCurrent,
viewofPlot
}) => {
const scaleX = viewofPlot.scale("x");
const scaleY = viewofPlot.scale("y");
dataCurrent.i = Math.max(
invert(
scaleX,
scaleX.apply(dataStart.i) + pixelCurrent[0] - pixelStart[0]
),
0.1
);
dataCurrent.j = Math.max(
invert(
scaleY,
scaleY.apply(dataStart.j) + pixelCurrent[1] - pixelStart[1]
),
0.1
);
const magnitude = Math.sqrt(
dataCurrent.i * dataCurrent.i + dataCurrent.j * dataCurrent.j
);
if (magnitude > 50) {
const scale = 50 / magnitude;
dataCurrent.i *= scale;
dataCurrent.j *= scale;
}
event.preventDefault();
}
})