import GeometryPoint from "./GeometryPoint.js"; import GeometryStroke from "./GeometryStroke.js"; export default class GeometryLine { constructor(pointA, pointB) { this.pointA = pointA; this.pointB = pointB; } getIntersectionWithLine(line) { try { let xa = (line.pointB.x - line.pointA.x) * (this.pointB.x * this.pointA.y - this.pointA.x * this.pointB.y); let xb = (this.pointB.x - this.pointA.x) * (line.pointB.x * line.pointA.y - line.pointA.x * line.pointB.y); let xc = (line.pointB.y - line.pointA.y) * (this.pointB.x - this.pointA.x); let xd = (this.pointB.y - this.pointA.y) * (line.pointB.x - line.pointA.x); let x = (xa - xb) / (xc - xd); if (isNaN(x)) { return null; } let ya = (this.pointA.y - this.pointB.y) *(line.pointB.x * line.pointA.y - line.pointA.x * line.pointB.y); let yb = (line.pointA.y - line.pointB.y) *(this.pointB.x * this.pointA.y - this.pointA.x * this.pointB.y); let yc = (line.pointB.y - line.pointA.y) * (this.pointB.x - this.pointA.x); let yd = (this.pointB.y - this.pointA.y) * (line.pointB.x - line.pointA.x); let y = (ya - yb) / (yc - yd); if (isNaN(y)) { return null; } return new GeometryPoint(x, y); } catch (error) { return null; } } getStroke() { return new GeometryStroke(this.pointA, this.pointB); } draw(context) { context.beginPath(); context.moveTo(this.pointA.x, this.pointA.y); context.lineTo(this.pointB.x, this.pointB.y); context.stroke(); } }