kyuki3rain / draw-circuit

draw-circuit.vercel.app
0 stars 0 forks source link

setCopyWireした時に、wireの途中にnodeがあればseparateEdgeをする必要がある #50

Open kyuki3rain opened 2 years ago

kyuki3rain commented 2 years ago
  const sweepNode = useCallback((nodeId1: NodeId, nodeId2: NodeId, edgeId: EdgeId) => {
    const node1 = nodeList.get(nodeId1);
    const node2 = nodeList.get(nodeId2);
    if (!node1 || !node2) return;

    const vxDiff = node2.point.vx - node1.point.vx;
    const vyDiff = node2.point.vy - node1.point.vy;

    const lcm = leastCommonMultiple(vxDiff, vyDiff);
    const vxUnit = vxDiff / lcm;
    const vyUnit = vyDiff / lcm;

    for (let i = 1; i < lcm; i += 1) {
      const nodeId = pointToNodeIdMap.get(
        JSON.stringify({ vx: node2.point.vx - vxUnit * i, vy: node2.point.vy - vyUnit * i })
      );
      if (nodeId) separateEdge(nodeId, undefined, edgeId);
    }
  }, []);
kyuki3rain commented 2 years ago
export const greatestCommonDivisor = (value1: number, value2: number): number =>
  value2 === 0 ? value1 : greatestCommonDivisor(value2, value1 % value2);
export const leastCommonMultiple = (value1: number, value2: number) =>
  (value1 * value2) / greatestCommonDivisor(value1, value2);