!1364 修复:孔角度错误

pull/1364/MERGE
ZoeLeeFZ 4 years ago committed by ChenX
parent 28e7fd244d
commit d9e7000064

@ -37,3 +37,11 @@ test('变量补全', () =>
let v = angleTo(new Vector3(1, 0, 0), new Vector3(0, 0, 1)); //? let v = angleTo(new Vector3(1, 0, 0), new Vector3(0, 0, 1)); //?
expect(v).toEqual(Math.PI * 0.5); expect(v).toEqual(Math.PI * 0.5);
}); });
test('几乎平行的2向量', () =>
{
let v1 = new Vector3(1);
let v2 = new Vector3(-1, 1.2246467991473532e-16, 5.041544910049491e-16);
let v = angleTo(v1, v2); //?
expect(v).toEqual(Math.PI);
});

@ -97,7 +97,7 @@ export function polar<T extends Vector2 | Vector3>(v: T, an: number, dis: number
return v; return v;
} }
export function angle(v: Vector3 | Vector2) export function angle(v: Vector3 | Vector2): number
{ {
let angle = Math.atan2(v.y, v.x); let angle = Math.atan2(v.y, v.x);
if (equaln(angle, 0, 1e-8)) return 0; if (equaln(angle, 0, 1e-8)) return 0;
@ -113,13 +113,17 @@ export function angle(v: Vector3 | Vector2)
* @param {Vector3} [ref] ,0,0,1 * @param {Vector3} [ref] ,0,0,1
* @returns * @returns
*/ */
export function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = new Vector3(0, 0, 1)) export function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = ZAxis): number
{ {
if (!ref.equals(new Vector3(0, 0, 1))) if (v1.equals(ZeroVec) || v2.equals(ZeroVec))
return 0;
v1 = v1.clone();
v2 = v2.clone();
if (ref !== ZAxis && !ref.equals(ZAxis))
{ {
ref = ref.clone(); ref = ref.clone();
v1 = v1.clone();
v2 = v2.clone();
//任意轴坐标系. 使用相机的构造矩阵. //任意轴坐标系. 使用相机的构造矩阵.
ref.multiplyScalar(-1); ref.multiplyScalar(-1);
let up = getLoocAtUpVec(ref); let up = getLoocAtUpVec(ref);
@ -131,10 +135,10 @@ export function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = new Vector3(0,
v1.z = 0; v1.z = 0;
v2.z = 0; v2.z = 0;
} }
if (v1.equals(ZeroVec) || v2.equals(ZeroVec))
return 0; //法向量不能转成单位向量在判断可能会导致原先z===0被转成大于0
let cv = new Vector3().crossVectors(v1, v2).normalize(); let cv = new Vector3().crossVectors(v1.normalize(), v2.normalize());
return cv.z === 0 ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z; return equaln(cv.z, 0) ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;
} }
export function getLoocAtUpVec(dir: Vector3): Vector3 export function getLoocAtUpVec(dir: Vector3): Vector3

@ -791,6 +791,9 @@ export namespace Production
if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6 && outline.PtInCurve(p)) if (Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6 && outline.PtInCurve(p))
{ {
let depth = z0 < 1e-2 ? z1 : br.Thickness - z0; let depth = z0 < 1e-2 ? z1 : br.Thickness - z0;
let angle = angleTo(XAxis, x);
if (equaln(angle, Math.PI))
angle = 0;
if (depth > 1e-2) if (depth > 1e-2)
data.frontBackHoles.push({ data.frontBackHoles.push({
type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj, type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj,
@ -798,7 +801,7 @@ export namespace Production
radius: cir.Radius, radius: cir.Radius,
depth, depth,
face: z0 < 1e-6 ? DrillingFace.Back : DrillingFace.Front, face: z0 < 1e-6 ? DrillingFace.Back : DrillingFace.Front,
angle: angleTo(XAxis, x), angle: angle,
}); });
} }
} }

Loading…
Cancel
Save