interface Point {  x: number;  y: number;}
const getLineSegIntersection = (  p1: Point,  p2: Point,  p3: Point,  p4: Point): Point | null => {  const { x: x1, y: y1 } = p1;  const { x: x2, y: y2 } = p2;  const { x: x3, y: y3 } = p3;  const { x: x4, y: y4 } = p4;  const a = y2 - y1;  const b = x1 - x2;  const c = x1 * y2 - x2 * y1;  const d = y4 - y3;  const e = x3 - x4;  const f = x3 * y4 - x4 * y3;  // 计算分母  const denominator = a * e - b * d;  // 判断分母是否为 0（代表平行）  if (Math.abs(denominator) < 0.000000001) {    // 这里有个特殊的重叠但只有一个交点的情况，可以考虑处理一下    return null;  }  const px = (c * e - f * b) / denominator;  const py = (a * f - c * d) / denominator;  // 判断交点是否在两个线段上  if (    px >= Math.min(x1, x2) &&    px <= Math.max(x1, x2) &&    py >= Math.min(y1, y2) &&    py <= Math.max(y1, y2) &&    px >= Math.min(x3, x4) &&    px <= Math.max(x3, x4) &&    py >= Math.min(y3, y4) &&    py <= Math.max(y3, y4)  ) {    return { x: px, y: py };  }  return null;};