mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-04 04:44:31 +01:00 
			
		
		
		
	refactor: point() -> pointFrom() to fix compiler issue (#8578)
				
					
				
			This commit is contained in:
		@@ -1,6 +1,6 @@
 | 
			
		||||
import type { GlobalPoint, LineSegment, Polygon, Radians } from "../../math";
 | 
			
		||||
import {
 | 
			
		||||
  point,
 | 
			
		||||
  pointFrom,
 | 
			
		||||
  lineSegment,
 | 
			
		||||
  polygon,
 | 
			
		||||
  pointOnLineSegment,
 | 
			
		||||
@@ -23,93 +23,127 @@ describe("point and line", () => {
 | 
			
		||||
  //   expect(pointRightofLine(point(2, 1), l)).toBe(true);
 | 
			
		||||
  // });
 | 
			
		||||
 | 
			
		||||
  const s: LineSegment<GlobalPoint> = lineSegment(point(1, 0), point(1, 2));
 | 
			
		||||
  const s: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(1, 0),
 | 
			
		||||
    pointFrom(1, 2),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  it("point on the line", () => {
 | 
			
		||||
    expect(pointOnLineSegment(point(0, 1), s)).toBe(false);
 | 
			
		||||
    expect(pointOnLineSegment(point(1, 1), s, 0)).toBe(true);
 | 
			
		||||
    expect(pointOnLineSegment(point(2, 1), s)).toBe(false);
 | 
			
		||||
    expect(pointOnLineSegment(pointFrom(0, 1), s)).toBe(false);
 | 
			
		||||
    expect(pointOnLineSegment(pointFrom(1, 1), s, 0)).toBe(true);
 | 
			
		||||
    expect(pointOnLineSegment(pointFrom(2, 1), s)).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe("point and polygon", () => {
 | 
			
		||||
  const poly: Polygon<GlobalPoint> = polygon(
 | 
			
		||||
    point(10, 10),
 | 
			
		||||
    point(50, 10),
 | 
			
		||||
    point(50, 50),
 | 
			
		||||
    point(10, 50),
 | 
			
		||||
    pointFrom(10, 10),
 | 
			
		||||
    pointFrom(50, 10),
 | 
			
		||||
    pointFrom(50, 50),
 | 
			
		||||
    pointFrom(10, 50),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  it("point on polygon", () => {
 | 
			
		||||
    expect(pointOnPolygon(point(30, 10), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(point(50, 30), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(point(30, 50), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(point(10, 30), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(point(30, 30), poly)).toBe(false);
 | 
			
		||||
    expect(pointOnPolygon(point(30, 70), poly)).toBe(false);
 | 
			
		||||
    expect(pointOnPolygon(pointFrom(30, 10), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(pointFrom(50, 30), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(pointFrom(30, 50), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(pointFrom(10, 30), poly)).toBe(true);
 | 
			
		||||
    expect(pointOnPolygon(pointFrom(30, 30), poly)).toBe(false);
 | 
			
		||||
    expect(pointOnPolygon(pointFrom(30, 70), poly)).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it("point in polygon", () => {
 | 
			
		||||
    const poly: Polygon<GlobalPoint> = polygon(
 | 
			
		||||
      point(0, 0),
 | 
			
		||||
      point(2, 0),
 | 
			
		||||
      point(2, 2),
 | 
			
		||||
      point(0, 2),
 | 
			
		||||
      pointFrom(0, 0),
 | 
			
		||||
      pointFrom(2, 0),
 | 
			
		||||
      pointFrom(2, 2),
 | 
			
		||||
      pointFrom(0, 2),
 | 
			
		||||
    );
 | 
			
		||||
    expect(polygonIncludesPoint(point(1, 1), poly)).toBe(true);
 | 
			
		||||
    expect(polygonIncludesPoint(point(3, 3), poly)).toBe(false);
 | 
			
		||||
    expect(polygonIncludesPoint(pointFrom(1, 1), poly)).toBe(true);
 | 
			
		||||
    expect(polygonIncludesPoint(pointFrom(3, 3), poly)).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe("point and ellipse", () => {
 | 
			
		||||
  const ellipse: Ellipse<GlobalPoint> = {
 | 
			
		||||
    center: point(0, 0),
 | 
			
		||||
    center: pointFrom(0, 0),
 | 
			
		||||
    angle: 0 as Radians,
 | 
			
		||||
    halfWidth: 2,
 | 
			
		||||
    halfHeight: 1,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  it("point on ellipse", () => {
 | 
			
		||||
    [point(0, 1), point(0, -1), point(2, 0), point(-2, 0)].forEach((p) => {
 | 
			
		||||
    [
 | 
			
		||||
      pointFrom(0, 1),
 | 
			
		||||
      pointFrom(0, -1),
 | 
			
		||||
      pointFrom(2, 0),
 | 
			
		||||
      pointFrom(-2, 0),
 | 
			
		||||
    ].forEach((p) => {
 | 
			
		||||
      expect(pointOnEllipse(p, ellipse)).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
    expect(pointOnEllipse(point(-1.4, 0.7), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(point(-1.4, 0.71), ellipse, 0.01)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(-1.4, 0.7), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(-1.4, 0.71), ellipse, 0.01)).toBe(true);
 | 
			
		||||
 | 
			
		||||
    expect(pointOnEllipse(point(1.4, 0.7), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(point(1.4, 0.71), ellipse, 0.01)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(1.4, 0.7), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(1.4, 0.71), ellipse, 0.01)).toBe(true);
 | 
			
		||||
 | 
			
		||||
    expect(pointOnEllipse(point(1, -0.86), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(point(1, -0.86), ellipse, 0.01)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(1, -0.86), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(1, -0.86), ellipse, 0.01)).toBe(true);
 | 
			
		||||
 | 
			
		||||
    expect(pointOnEllipse(point(-1, -0.86), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(point(-1, -0.86), ellipse, 0.01)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(-1, -0.86), ellipse, 0.1)).toBe(true);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(-1, -0.86), ellipse, 0.01)).toBe(true);
 | 
			
		||||
 | 
			
		||||
    expect(pointOnEllipse(point(-1, 0.8), ellipse)).toBe(false);
 | 
			
		||||
    expect(pointOnEllipse(point(1, -0.8), ellipse)).toBe(false);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(-1, 0.8), ellipse)).toBe(false);
 | 
			
		||||
    expect(pointOnEllipse(pointFrom(1, -0.8), ellipse)).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it("point in ellipse", () => {
 | 
			
		||||
    [point(0, 1), point(0, -1), point(2, 0), point(-2, 0)].forEach((p) => {
 | 
			
		||||
    [
 | 
			
		||||
      pointFrom(0, 1),
 | 
			
		||||
      pointFrom(0, -1),
 | 
			
		||||
      pointFrom(2, 0),
 | 
			
		||||
      pointFrom(-2, 0),
 | 
			
		||||
    ].forEach((p) => {
 | 
			
		||||
      expect(pointInEllipse(p, ellipse)).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    expect(pointInEllipse(point(-1, 0.8), ellipse)).toBe(true);
 | 
			
		||||
    expect(pointInEllipse(point(1, -0.8), ellipse)).toBe(true);
 | 
			
		||||
    expect(pointInEllipse(pointFrom(-1, 0.8), ellipse)).toBe(true);
 | 
			
		||||
    expect(pointInEllipse(pointFrom(1, -0.8), ellipse)).toBe(true);
 | 
			
		||||
 | 
			
		||||
    expect(pointInEllipse(point(-1, 1), ellipse)).toBe(false);
 | 
			
		||||
    expect(pointInEllipse(point(-1.4, 0.8), ellipse)).toBe(false);
 | 
			
		||||
    expect(pointInEllipse(pointFrom(-1, 1), ellipse)).toBe(false);
 | 
			
		||||
    expect(pointInEllipse(pointFrom(-1.4, 0.8), ellipse)).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
describe("line and line", () => {
 | 
			
		||||
  const lineA: LineSegment<GlobalPoint> = lineSegment(point(1, 4), point(3, 4));
 | 
			
		||||
  const lineB: LineSegment<GlobalPoint> = lineSegment(point(2, 1), point(2, 7));
 | 
			
		||||
  const lineC: LineSegment<GlobalPoint> = lineSegment(point(1, 8), point(3, 8));
 | 
			
		||||
  const lineD: LineSegment<GlobalPoint> = lineSegment(point(1, 8), point(3, 8));
 | 
			
		||||
  const lineE: LineSegment<GlobalPoint> = lineSegment(point(1, 9), point(3, 9));
 | 
			
		||||
  const lineF: LineSegment<GlobalPoint> = lineSegment(point(1, 2), point(3, 4));
 | 
			
		||||
  const lineG: LineSegment<GlobalPoint> = lineSegment(point(0, 1), point(2, 3));
 | 
			
		||||
  const lineA: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(1, 4),
 | 
			
		||||
    pointFrom(3, 4),
 | 
			
		||||
  );
 | 
			
		||||
  const lineB: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(2, 1),
 | 
			
		||||
    pointFrom(2, 7),
 | 
			
		||||
  );
 | 
			
		||||
  const lineC: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(1, 8),
 | 
			
		||||
    pointFrom(3, 8),
 | 
			
		||||
  );
 | 
			
		||||
  const lineD: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(1, 8),
 | 
			
		||||
    pointFrom(3, 8),
 | 
			
		||||
  );
 | 
			
		||||
  const lineE: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(1, 9),
 | 
			
		||||
    pointFrom(3, 9),
 | 
			
		||||
  );
 | 
			
		||||
  const lineF: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(1, 2),
 | 
			
		||||
    pointFrom(3, 4),
 | 
			
		||||
  );
 | 
			
		||||
  const lineG: LineSegment<GlobalPoint> = lineSegment(
 | 
			
		||||
    pointFrom(0, 1),
 | 
			
		||||
    pointFrom(2, 3),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  it("intersection", () => {
 | 
			
		||||
    expect(segmentsIntersectAt(lineA, lineB)).toEqual([2, 4]);
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ import type { Curve, LineSegment, Polygon, Radians } from "../../math";
 | 
			
		||||
import {
 | 
			
		||||
  curve,
 | 
			
		||||
  lineSegment,
 | 
			
		||||
  point,
 | 
			
		||||
  pointFrom,
 | 
			
		||||
  pointDistance,
 | 
			
		||||
  pointFromArray,
 | 
			
		||||
  pointFromVector,
 | 
			
		||||
@@ -118,23 +118,23 @@ export const getPolygonShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
  const cx = x + width / 2;
 | 
			
		||||
  const cy = y + height / 2;
 | 
			
		||||
 | 
			
		||||
  const center: Point = point(cx, cy);
 | 
			
		||||
  const center: Point = pointFrom(cx, cy);
 | 
			
		||||
 | 
			
		||||
  let data: Polygon<Point>;
 | 
			
		||||
 | 
			
		||||
  if (element.type === "diamond") {
 | 
			
		||||
    data = polygon(
 | 
			
		||||
      pointRotateRads(point(cx, y), center, angle),
 | 
			
		||||
      pointRotateRads(point(x + width, cy), center, angle),
 | 
			
		||||
      pointRotateRads(point(cx, y + height), center, angle),
 | 
			
		||||
      pointRotateRads(point(x, cy), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(cx, y), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(x + width, cy), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(cx, y + height), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(x, cy), center, angle),
 | 
			
		||||
    );
 | 
			
		||||
  } else {
 | 
			
		||||
    data = polygon(
 | 
			
		||||
      pointRotateRads(point(x, y), center, angle),
 | 
			
		||||
      pointRotateRads(point(x + width, y), center, angle),
 | 
			
		||||
      pointRotateRads(point(x + width, y + height), center, angle),
 | 
			
		||||
      pointRotateRads(point(x, y + height), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(x, y), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(x + width, y), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(x + width, y + height), center, angle),
 | 
			
		||||
      pointRotateRads(pointFrom(x, y + height), center, angle),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -162,11 +162,11 @@ export const getSelectionBoxShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
  y2 += padding;
 | 
			
		||||
 | 
			
		||||
  //const angleInDegrees = angleToDegrees(element.angle);
 | 
			
		||||
  const center = point(cx, cy);
 | 
			
		||||
  const topLeft = pointRotateRads(point(x1, y1), center, element.angle);
 | 
			
		||||
  const topRight = pointRotateRads(point(x2, y1), center, element.angle);
 | 
			
		||||
  const bottomLeft = pointRotateRads(point(x1, y2), center, element.angle);
 | 
			
		||||
  const bottomRight = pointRotateRads(point(x2, y2), center, element.angle);
 | 
			
		||||
  const center = pointFrom(cx, cy);
 | 
			
		||||
  const topLeft = pointRotateRads(pointFrom(x1, y1), center, element.angle);
 | 
			
		||||
  const topRight = pointRotateRads(pointFrom(x2, y1), center, element.angle);
 | 
			
		||||
  const bottomLeft = pointRotateRads(pointFrom(x1, y2), center, element.angle);
 | 
			
		||||
  const bottomRight = pointRotateRads(pointFrom(x2, y2), center, element.angle);
 | 
			
		||||
 | 
			
		||||
  return {
 | 
			
		||||
    type: "polygon",
 | 
			
		||||
@@ -183,7 +183,7 @@ export const getEllipseShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
  return {
 | 
			
		||||
    type: "ellipse",
 | 
			
		||||
    data: {
 | 
			
		||||
      center: point(x + width / 2, y + height / 2),
 | 
			
		||||
      center: pointFrom(x + width / 2, y + height / 2),
 | 
			
		||||
      angle,
 | 
			
		||||
      halfWidth: width / 2,
 | 
			
		||||
      halfHeight: height / 2,
 | 
			
		||||
@@ -203,20 +203,20 @@ export const getCurvePathOps = (shape: Drawable): Op[] => {
 | 
			
		||||
// linear
 | 
			
		||||
export const getCurveShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
  roughShape: Drawable,
 | 
			
		||||
  startingPoint: Point = point(0, 0),
 | 
			
		||||
  startingPoint: Point = pointFrom(0, 0),
 | 
			
		||||
  angleInRadian: Radians,
 | 
			
		||||
  center: Point,
 | 
			
		||||
): GeometricShape<Point> => {
 | 
			
		||||
  const transform = (p: Point): Point =>
 | 
			
		||||
    pointRotateRads(
 | 
			
		||||
      point(p[0] + startingPoint[0], p[1] + startingPoint[1]),
 | 
			
		||||
      pointFrom(p[0] + startingPoint[0], p[1] + startingPoint[1]),
 | 
			
		||||
      center,
 | 
			
		||||
      angleInRadian,
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
  const ops = getCurvePathOps(roughShape);
 | 
			
		||||
  const polycurve: Polycurve<Point> = [];
 | 
			
		||||
  let p0 = point<Point>(0, 0);
 | 
			
		||||
  let p0 = pointFrom<Point>(0, 0);
 | 
			
		||||
 | 
			
		||||
  for (const op of ops) {
 | 
			
		||||
    if (op.op === "move") {
 | 
			
		||||
@@ -225,9 +225,9 @@ export const getCurveShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
      p0 = transform(p);
 | 
			
		||||
    }
 | 
			
		||||
    if (op.op === "bcurveTo") {
 | 
			
		||||
      const p1 = transform(point<Point>(op.data[0], op.data[1]));
 | 
			
		||||
      const p2 = transform(point<Point>(op.data[2], op.data[3]));
 | 
			
		||||
      const p3 = transform(point<Point>(op.data[4], op.data[5]));
 | 
			
		||||
      const p1 = transform(pointFrom<Point>(op.data[0], op.data[1]));
 | 
			
		||||
      const p2 = transform(pointFrom<Point>(op.data[2], op.data[3]));
 | 
			
		||||
      const p3 = transform(pointFrom<Point>(op.data[4], op.data[5]));
 | 
			
		||||
      polycurve.push(curve<Point>(p0, p1, p2, p3));
 | 
			
		||||
      p0 = p3;
 | 
			
		||||
    }
 | 
			
		||||
@@ -288,13 +288,13 @@ export const getFreedrawShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
export const getClosedCurveShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
  element: ExcalidrawLinearElement,
 | 
			
		||||
  roughShape: Drawable,
 | 
			
		||||
  startingPoint: Point = point<Point>(0, 0),
 | 
			
		||||
  startingPoint: Point = pointFrom<Point>(0, 0),
 | 
			
		||||
  angleInRadian: Radians,
 | 
			
		||||
  center: Point,
 | 
			
		||||
): GeometricShape<Point> => {
 | 
			
		||||
  const transform = (p: Point) =>
 | 
			
		||||
    pointRotateRads(
 | 
			
		||||
      point(p[0] + startingPoint[0], p[1] + startingPoint[1]),
 | 
			
		||||
      pointFrom(p[0] + startingPoint[0], p[1] + startingPoint[1]),
 | 
			
		||||
      center,
 | 
			
		||||
      angleInRadian,
 | 
			
		||||
    );
 | 
			
		||||
@@ -316,17 +316,17 @@ export const getClosedCurveShape = <Point extends GlobalPoint | LocalPoint>(
 | 
			
		||||
    if (operation.op === "move") {
 | 
			
		||||
      odd = !odd;
 | 
			
		||||
      if (odd) {
 | 
			
		||||
        points.push(point(operation.data[0], operation.data[1]));
 | 
			
		||||
        points.push(pointFrom(operation.data[0], operation.data[1]));
 | 
			
		||||
      }
 | 
			
		||||
    } else if (operation.op === "bcurveTo") {
 | 
			
		||||
      if (odd) {
 | 
			
		||||
        points.push(point(operation.data[0], operation.data[1]));
 | 
			
		||||
        points.push(point(operation.data[2], operation.data[3]));
 | 
			
		||||
        points.push(point(operation.data[4], operation.data[5]));
 | 
			
		||||
        points.push(pointFrom(operation.data[0], operation.data[1]));
 | 
			
		||||
        points.push(pointFrom(operation.data[2], operation.data[3]));
 | 
			
		||||
        points.push(pointFrom(operation.data[4], operation.data[5]));
 | 
			
		||||
      }
 | 
			
		||||
    } else if (operation.op === "lineTo") {
 | 
			
		||||
      if (odd) {
 | 
			
		||||
        points.push(point(operation.data[0], operation.data[1]));
 | 
			
		||||
        points.push(pointFrom(operation.data[0], operation.data[1]));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -364,27 +364,27 @@ export const segmentIntersectRectangleElement = <
 | 
			
		||||
    element.x + element.width + gap,
 | 
			
		||||
    element.y + element.height + gap,
 | 
			
		||||
  ];
 | 
			
		||||
  const center = point(
 | 
			
		||||
  const center = pointFrom(
 | 
			
		||||
    (bounds[0] + bounds[2]) / 2,
 | 
			
		||||
    (bounds[1] + bounds[3]) / 2,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  return [
 | 
			
		||||
    lineSegment(
 | 
			
		||||
      pointRotateRads(point(bounds[0], bounds[1]), center, element.angle),
 | 
			
		||||
      pointRotateRads(point(bounds[2], bounds[1]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[0], bounds[1]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[2], bounds[1]), center, element.angle),
 | 
			
		||||
    ),
 | 
			
		||||
    lineSegment(
 | 
			
		||||
      pointRotateRads(point(bounds[2], bounds[1]), center, element.angle),
 | 
			
		||||
      pointRotateRads(point(bounds[2], bounds[3]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[2], bounds[1]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[2], bounds[3]), center, element.angle),
 | 
			
		||||
    ),
 | 
			
		||||
    lineSegment(
 | 
			
		||||
      pointRotateRads(point(bounds[2], bounds[3]), center, element.angle),
 | 
			
		||||
      pointRotateRads(point(bounds[0], bounds[3]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[2], bounds[3]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[0], bounds[3]), center, element.angle),
 | 
			
		||||
    ),
 | 
			
		||||
    lineSegment(
 | 
			
		||||
      pointRotateRads(point(bounds[0], bounds[3]), center, element.angle),
 | 
			
		||||
      pointRotateRads(point(bounds[0], bounds[1]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[0], bounds[3]), center, element.angle),
 | 
			
		||||
      pointRotateRads(pointFrom(bounds[0], bounds[1]), center, element.angle),
 | 
			
		||||
    ),
 | 
			
		||||
  ]
 | 
			
		||||
    .map((s) => segmentsIntersectAt(segment, s))
 | 
			
		||||
@@ -404,7 +404,7 @@ const distanceToEllipse = <Point extends LocalPoint | GlobalPoint>(
 | 
			
		||||
  );
 | 
			
		||||
  const [rotatedPointX, rotatedPointY] = pointRotateRads(
 | 
			
		||||
    pointFromVector(translatedPoint),
 | 
			
		||||
    point(0, 0),
 | 
			
		||||
    pointFrom(0, 0),
 | 
			
		||||
    -angle as Radians,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
@@ -442,7 +442,10 @@ const distanceToEllipse = <Point extends LocalPoint | GlobalPoint>(
 | 
			
		||||
    b * ty * Math.sign(rotatedPointY),
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  return pointDistance(point(rotatedPointX, rotatedPointY), point(minX, minY));
 | 
			
		||||
  return pointDistance(
 | 
			
		||||
    pointFrom(rotatedPointX, rotatedPointY),
 | 
			
		||||
    pointFrom(minX, minY),
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const pointOnEllipse = <Point extends LocalPoint | GlobalPoint>(
 | 
			
		||||
@@ -464,7 +467,7 @@ export const pointInEllipse = <Point extends LocalPoint | GlobalPoint>(
 | 
			
		||||
  );
 | 
			
		||||
  const [rotatedPointX, rotatedPointY] = pointRotateRads(
 | 
			
		||||
    pointFromVector(translatedPoint),
 | 
			
		||||
    point(0, 0),
 | 
			
		||||
    pointFrom(0, 0),
 | 
			
		||||
    -angle as Radians,
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user