1
0
Fork 0

Added utils.curveCrossesLine and utils.curveCrossesCurve

This commit is contained in:
Joost De Cock 2018-08-21 13:49:12 +02:00
parent aa80da37cc
commit f43be99877
3 changed files with 160 additions and 0 deletions

View file

@ -93,6 +93,86 @@ it("Should detect horizontal lines never pass a give Y-value", () => {
expect(freesewing.utils.beamCrossesY(a, b, 69)).to.equal(false);
});
it("Should find no intersections between a curve and a line", () => {
let A = new freesewing.Point(10, 10);
let Acp = new freesewing.Point(310, 40);
let B = new freesewing.Point(110, 70);
let Bcp = new freesewing.Point(-210, 40);
let E = new freesewing.Point(-20, -20);
let D = new freesewing.Point(30, -85);
let hit = freesewing.utils.curveCrossesLine(A, Acp, Bcp, B, E, D);
expect(hit).to.equal(false);
});
it("Should find 1 intersection between a curve and a line", () => {
let A = new freesewing.Point(10, 10);
let Acp = new freesewing.Point(310, 40);
let B = new freesewing.Point(110, 70);
let Bcp = new freesewing.Point(-210, 40);
let E = new freesewing.Point(20, 20);
let D = new freesewing.Point(30, -85);
let hit = freesewing.utils.curveCrossesLine(A, Acp, Bcp, B, E, D);
expect(hit.x).to.equal(20.85);
expect(hit.y).to.equal(11.11);
});
it("Should find 3 intersections between a curve and a line", () => {
let A = new freesewing.Point(10, 10);
let Acp = new freesewing.Point(310, 40);
let B = new freesewing.Point(110, 70);
let Bcp = new freesewing.Point(-210, 40);
let E = new freesewing.Point(20, -5);
let D = new freesewing.Point(100, 85);
let hits = freesewing.utils.curveCrossesLine(A, Acp, Bcp, B, E, D);
expect(hits.length).to.equal(3);
});
it("Should find 9 intersections between two curves", () => {
let A = new freesewing.Point(10, 10);
let Acp = new freesewing.Point(310, 40);
let B = new freesewing.Point(110, 70);
let Bcp = new freesewing.Point(-210, 40);
let C = new freesewing.Point(20, -5);
let Ccp = new freesewing.Point(60, 300);
let D = new freesewing.Point(100, 85);
let Dcp = new freesewing.Point(70, -220);
let hits = freesewing.utils.curveCrossesCurve(A, Acp, Bcp, B, C, Ccp, Dcp, D);
expect(hits.length).to.equal(9);
});
it("Should find 1 intersection between two curves", () => {
let A = new freesewing.Point(10, 10);
let Acp = new freesewing.Point(310, 40);
let B = new freesewing.Point(110, 70);
let Bcp = new freesewing.Point(-210, 40);
let C = new freesewing.Point(20, -5);
let Ccp = new freesewing.Point(-60, 300);
let D = new freesewing.Point(-200, 85);
let Dcp = new freesewing.Point(-270, -220);
let hit = freesewing.utils.curveCrossesCurve(A, Acp, Bcp, B, C, Ccp, Dcp, D);
expect(hit.x).to.equal(15.58);
expect(hit.y).to.equal(10.56);
});
it("Should find no intersection between two curves", () => {
let A = new freesewing.Point(10, 10);
let Acp = new freesewing.Point(310, 40);
let B = new freesewing.Point(110, 70);
let Bcp = new freesewing.Point(-210, 40);
let C = new freesewing.Point(20, -5);
let Ccp = new freesewing.Point(-60, -300);
let D = new freesewing.Point(-200, 85);
let Dcp = new freesewing.Point(-270, -220);
let hit = freesewing.utils.curveCrossesCurve(A, Acp, Bcp, B, C, Ccp, Dcp, D);
expect(hit).to.equal(false);
});
it("Should correctly format units", () => {
expect(freesewing.utils.units(123.456)).to.equal("12.35cm");
expect(freesewing.utils.units(123.456, "imperial")).to.equal('4.86"');