{"version":3,"sources":["../src/LineSegment.js"],"names":[],"mappings":"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","file":"LineSegment.js","sourcesContent":["\"use strict\";\r\n\r\nimport { Vector } from \"./Vector\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Line } from \"./Line\";\r\n\r\nexport class LineSegment\r\n{\r\n constructor (v1, v2)\r\n {\r\n this.setPoints(v1, v2);\r\n }\r\n\r\n eql (segment)\r\n {\r\n return (this.start.eql(segment.start) && this.end.eql(segment.end)) || (this.start.eql(segment.end) && this.end.eql(segment.start));\r\n }\r\n\r\n dup ()\r\n {\r\n return new LineSegment(this.start, this.end);\r\n }\r\n\r\n length ()\r\n {\r\n var A = this.start.elements, B = this.end.elements;\r\n var C1 = B[0] - A[0], C2 = B[1] - A[1], C3 = B[2] - A[2];\r\n return Math.sqrt(C1*C1 + C2*C2 + C3*C3);\r\n }\r\n\r\n toVector ()\r\n {\r\n var A = this.start.elements, B = this.end.elements;\r\n return new Vector([B[0] - A[0], B[1] - A[1], B[2] - A[2]]);\r\n }\r\n\r\n midpoint ()\r\n {\r\n var A = this.start.elements, B = this.end.elements;\r\n return new Vector([(B[0] + A[0])/2, (B[1] + A[1])/2, (B[2] + A[2])/2]);\r\n }\r\n\r\n bisectingPlane ()\r\n {\r\n return new Plane(this.midpoint(), this.toVector());\r\n }\r\n\r\n translate (vector)\r\n {\r\n var V = vector.elements || vector;\r\n var S = this.start.elements, E = this.end.elements;\r\n return new LineSegment(\r\n [S[0] + V[0], S[1] + V[1], S[2] + (V[2] || 0)],\r\n [E[0] + V[0], E[1] + V[1], E[2] + (V[2] || 0)]\r\n );\r\n }\r\n\r\n isParallelTo (obj)\r\n {\r\n return this.line.isParallelTo(obj);\r\n }\r\n\r\n distanceFrom (obj)\r\n {\r\n var P = this.pointClosestTo(obj);\r\n return (P === null) ? null : P.distanceFrom(obj);\r\n }\r\n\r\n contains (obj)\r\n {\r\n if (obj.start && obj.end)\r\n {\r\n return this.contains(obj.start) && this.contains(obj.end);\r\n }\r\n var P = (obj.elements || obj).slice();\r\n if (P.length === 2)\r\n {\r\n P.push(0);\r\n }\r\n if (this.start.eql(P))\r\n {\r\n return true;\r\n }\r\n var S = this.start.elements;\r\n var V = new Vector([S[0] - P[0], S[1] - P[1], S[2] - (P[2] || 0)]);\r\n var vect = this.toVector();\r\n return V.isAntiparallelTo(vect) && V.modulus() <= vect.modulus();\r\n }\r\n\r\n intersects (obj)\r\n {\r\n return (this.intersectionWith(obj) !== null);\r\n }\r\n\r\n intersectionWith (obj)\r\n {\r\n if (!this.line.intersects(obj))\r\n {\r\n return null;\r\n }\r\n var P = this.line.intersectionWith(obj);\r\n return (this.contains(P) ? P : null);\r\n }\r\n\r\n pointClosestTo (obj)\r\n {\r\n if (obj.normal)\r\n {\r\n // obj is a plane\r\n var V = this.line.intersectionWith(obj);\r\n if (V === null) { return null; }\r\n return this.pointClosestTo(V);\r\n }\r\n else\r\n {\r\n // obj is a line (segment) or point\r\n var P = this.line.pointClosestTo(obj);\r\n if (P === null)\r\n {\r\n return null;\r\n }\r\n if (this.contains(P))\r\n {\r\n return P;\r\n }\r\n return (this.line.positionOf(P) < 0 ? this.start : this.end).dup();\r\n }\r\n }\r\n\r\n setPoints (startPoint, endPoint)\r\n {\r\n startPoint = new Vector(startPoint).to3D();\r\n endPoint = new Vector(endPoint).to3D();\r\n if (startPoint === null || endPoint === null)\r\n {\r\n return null;\r\n }\r\n this.line = new Line(startPoint, endPoint.subtract(startPoint));\r\n this.start = startPoint;\r\n this.end = endPoint;\r\n return this;\r\n }\r\n}"]}