diff --git a/__test__/Line/line.test.ts b/__test__/Line/line.test.ts index 1a6907c14..1033f1d75 100644 --- a/__test__/Line/line.test.ts +++ b/__test__/Line/line.test.ts @@ -159,39 +159,39 @@ test('直线合并', () => let l1 = new Line(new Vector3(0), new Vector3(10)); let l2 = new Line(new Vector3(0), new Vector3(0)); - //L1 ----------- + //L1 ----------- //L2 -- l2.StartPoint = new Vector3(-5); l2.EndPoint = new Vector3(-3); expect(l1.Join(l2)).toBeFalsy(); - //L1 ----------- - //L2 ----------- + //L1 ----------- + //L2 ----------- l2.StartPoint = new Vector3(-5); l2.EndPoint = new Vector3(5); expect(l1.Join(l2)).toBeTruthy(); - //L1 ----------- - //L2 ---- + //L1 ----------- + //L2 ---- l2.StartPoint = new Vector3(2); l2.EndPoint = new Vector3(5); expect(l1.Join(l2)).toBeTruthy(); - //L1 ----------- - //L2 ---- + //L1 ----------- + //L2 ---- l2.StartPoint = new Vector3(9); l2.EndPoint = new Vector3(12); expect(l1.Join(l2)).toBeTruthy(); - //L1 ----------- - //L2 ---- + //L1 ----------- + //L2 ---- l2.StartPoint = new Vector3(15); l2.EndPoint = new Vector3(12); expect(l1.Join(l2)).toBeTruthy(); - //L1 ----------- - //L2 --------------------- + //L1 ----------- + //L2 --------------------- l2.StartPoint = new Vector3(-2); l2.EndPoint = new Vector3(12); expect(l1.Join(l2)).toBeTruthy(); @@ -204,7 +204,7 @@ test('直线合并容差', () => let l2 = new Line(new Vector3(10 + 1e-6), new Vector3(15)); expect(l1.Join(l2)).toBeTruthy(); l2 = new Line(new Vector3(-10), new Vector3(0 - 1e-5)); - expect(l1.Join(l2)).toBeTruthy(); + expect(l1.Join(l2, true, 1e-6)).toBeTruthy(); }); test('直线合并不平行', () => diff --git a/src/Geometry/GeUtils.ts b/src/Geometry/GeUtils.ts index 68ee8ea75..0ec09d42a 100644 --- a/src/Geometry/GeUtils.ts +++ b/src/Geometry/GeUtils.ts @@ -136,6 +136,9 @@ export function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = ZAxis): number v2.z = 0; } + if (v1.equals(ZeroVec) || v2.equals(ZeroVec))//修复,这里有可能被更改为0 + return 0; + //法向量不能转成单位向量在判断,可能会导致原先z===0被转成大于0 let cv = new Vector3().crossVectors(v1.normalize(), v2.normalize()); return equaln(cv.z, 0) ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;