nuintun / qrcode

A pure JavaScript QRCode encode and decode library.
https://nuintun.github.io/qrcode
MIT License
194 stars 26 forks source link

isPointInQuadrangle #324

Closed nuintun closed 1 year ago

nuintun commented 1 year ago
export function calcTriangleArea(a: Point, b: Point, c: Point): number {
  const { x: ax, y: ay } = a;
  const { x: bx, y: by } = b;
  const { x: cx, y: cy } = c;

  return Math.abs((ax * by + bx * cy + cx * ay - bx * ay - cx * by - ax * cy) / 2);
}

export function isPointInQuadrangle(p: Point, a: Point, b: Point, c: Point, d: Point): boolean {
  return (
    round(calcTriangleArea(a, b, c) + calcTriangleArea(c, d, a)) ===
    round(calcTriangleArea(a, b, p) + calcTriangleArea(b, c, p) + calcTriangleArea(c, d, p) + calcTriangleArea(d, a, p))
  );
}
nuintun commented 1 year ago
export function calculateTriangleArea(a: Point, b: Point, c: Point): number {
  const { x: ax, y: ay } = a;
  const { x: bx, y: by } = b;
  const { x: cx, y: cy } = c;

  return Math.abs(ax * (by - cy) + bx * (cy - ay) + cx * (ay - by)) / 2;
}

export function isPointInQuadrangle(p: Point, a: Point, b: Point, c: Point, d: Point): boolean {
  const s1 = calculateTriangleArea(a, b, p);
  const s2 = calculateTriangleArea(b, c, p);
  const s3 = calculateTriangleArea(c, d, p);
  const s4 = calculateTriangleArea(d, a, p);
  const area = calculateTriangleArea(a, b, c) + calculateTriangleArea(c, d, a);

  return s1 + s2 + s3 + s4 - area <= 0;
}