!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)); //?
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;
}
export function angle(v: Vector3 | Vector2)
export function angle(v: Vector3 | Vector2): number
{
let angle = Math.atan2(v.y, v.x);
if (equaln(angle, 0, 1e-8)) return 0;
@ -113,13 +113,17 @@ export function angle(v: Vector3 | Vector2)
* @param {Vector3} [ref] ,0,0,1
* @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)))
{
ref = ref.clone();
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.multiplyScalar(-1);
let up = getLoocAtUpVec(ref);
@ -131,10 +135,10 @@ export function angleTo(v1: Vector3, v2: Vector3, ref: Vector3 = new Vector3(0,
v1.z = 0;
v2.z = 0;
}
if (v1.equals(ZeroVec) || v2.equals(ZeroVec))
return 0;
let cv = new Vector3().crossVectors(v1, v2).normalize();
return cv.z === 0 ? v1.angleTo(v2) : v1.angleTo(v2) * cv.z;
//法向量不能转成单位向量在判断可能会导致原先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;
}
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))
{
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)
data.frontBackHoles.push({
type: d.isThrough ? GangDrillType.TK : GangDrillType.Ymj,
@ -798,7 +801,7 @@ export namespace Production
radius: cir.Radius,
depth,
face: z0 < 1e-6 ? DrillingFace.Back : DrillingFace.Front,
angle: angleTo(XAxis, x),
angle: angle,
});
}
}

Loading…
Cancel
Save