!978 修复:因为精度问题导致c2r错误的问题

pull/978/MERGE
ChenX 4 years ago
parent bd800e4604
commit 9e717dd844

@ -1,8 +1,28 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`面域分析测试 1`] = `23`;
exports[`因为顶点精度问题导致的角度精度问题 1`] = `1`;
exports[`面域分析测试 2`] = `142`;
exports[`因为顶点精度问题导致的角度精度问题 2`] = `7`;
exports[`因为顶点精度问题导致的角度精度问题 3`] = `"2180.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 4`] = `"1146.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 5`] = `"894.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 6`] = `"1146.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 7`] = `"1896.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 8`] = `"894.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 9`] = `"176.00000"`;
exports[`因为顶点精度问题导致的角度精度问题 10`] = `"156.00000"`;
exports[`面域分析测试 1`] = `22`;
exports[`面域分析测试 2`] = `144`;
exports[`面域分析测试 3`] = `"13179.30542"`;
@ -48,109 +68,109 @@ exports[`面域分析测试 23`] = `"12510.62589"`;
exports[`面域分析测试 24`] = `"210.78347"`;
exports[`面域分析测试 25`] = `"364.25276"`;
exports[`面域分析测试 25`] = `"5.02745"`;
exports[`面域分析测试 26`] = `"5.02745"`;
exports[`面域分析测试 26`] = `"7.40909"`;
exports[`面域分析测试 27`] = `"7.40909"`;
exports[`面域分析测试 27`] = `"5.64163"`;
exports[`面域分析测试 28`] = `"5.64163"`;
exports[`面域分析测试 28`] = `"22.56687"`;
exports[`面域分析测试 29`] = `"22.56687"`;
exports[`面域分析测试 30`] = `"22.56687"`;
exports[`面域分析测试 30`] = `"6.29260"`;
exports[`面域分析测试 31`] = `"6.29260"`;
exports[`面域分析测试 31`] = `"4.84802"`;
exports[`面域分析测试 32`] = `"4.84802"`;
exports[`面域分析测试 32`] = `"12.85409"`;
exports[`面域分析测试 33`] = `"12.85409"`;
exports[`面域分析测试 34`] = `"12.85409"`;
exports[`面域分析测试 34`] = `"5.41894"`;
exports[`面域分析测试 35`] = `"5.41894"`;
exports[`面域分析测试 35`] = `"4.76118"`;
exports[`面域分析测试 36`] = `"4.76118"`;
exports[`面域分析测试 36`] = `"6.89609"`;
exports[`面域分析测试 37`] = `"6.89609"`;
exports[`面域分析测试 37`] = `"17.07107"`;
exports[`面域分析测试 38`] = `"17.07107"`;
exports[`面域分析测试 39`] = `"17.07107"`;
exports[`面域分析测试 40`] = `"17.07107"`;
exports[`面域分析测试 40`] = `"15.40312"`;
exports[`面域分析测试 41`] = `"15.40312"`;
exports[`面域分析测试 41`] = `"14.47419"`;
exports[`面域分析测试 42`] = `"14.47419"`;
exports[`面域分析测试 42`] = `"1188.92413"`;
exports[`面域分析测试 43`] = `"1188.92413"`;
exports[`面域分析测试 43`] = `"773.24901"`;
exports[`面域分析测试 44`] = `"773.24901"`;
exports[`面域分析测试 44`] = `"452.62475"`;
exports[`面域分析测试 45`] = `"452.62475"`;
exports[`面域分析测试 45`] = `"820.47616"`;
exports[`面域分析测试 46`] = `"820.47616"`;
exports[`面域分析测试 46`] = `"1188.92413"`;
exports[`面域分析测试 47`] = `"1188.92413"`;
exports[`面域分析测试 47`] = `"773.24901"`;
exports[`面域分析测试 48`] = `"773.24901"`;
exports[`面域分析测试 48`] = `"452.62475"`;
exports[`面域分析测试 49`] = `"452.62475"`;
exports[`面域分析测试 49`] = `"820.47616"`;
exports[`面域分析测试 50`] = `"820.47616"`;
exports[`面域分析测试 50`] = `"492.41588"`;
exports[`面域分析测试 51`] = `"492.41588"`;
exports[`面域分析测试 51`] = `"448.10890"`;
exports[`面域分析测试 52`] = `"448.10890"`;
exports[`面域分析测试 52`] = `"64.35392"`;
exports[`面域分析测试 53`] = `"64.35392"`;
exports[`面域分析测试 53`] = `"106.96167"`;
exports[`面域分析测试 54`] = `"106.96167"`;
exports[`面域分析测试 54`] = `"24.65353"`;
exports[`面域分析测试 55`] = `"24.65353"`;
exports[`面域分析测试 55`] = `"73.52590"`;
exports[`面域分析测试 56`] = `"73.52590"`;
exports[`面域分析测试 56`] = `"15.10137"`;
exports[`面域分析测试 57`] = `"15.10137"`;
exports[`面域分析测试 57`] = `"49.93390"`;
exports[`面域分析测试 58`] = `"49.93390"`;
exports[`面域分析测试 58`] = `"45.78225"`;
exports[`面域分析测试 59`] = `"45.78225"`;
exports[`面域分析测试 59`] = `"72.00000"`;
exports[`面域分析测试 60`] = `"72.00000"`;
exports[`面域分析测试 60`] = `"764.50552"`;
exports[`面域分析测试 61`] = `"764.50552"`;
exports[`面域分析测试 62`] = `"764.50552"`;
exports[`面域分析测试 62`] = `"1457.01103"`;
exports[`面域分析测试 63`] = `"1493.01103"`;
exports[`面域分析测试 63`] = `"492.41588"`;
exports[`面域分析测试 64`] = `"492.41588"`;
exports[`面域分析测试 64`] = `"448.10890"`;
exports[`面域分析测试 65`] = `"448.10890"`;
exports[`面域分析测试 65`] = `"72.00000"`;
exports[`面域分析测试 66`] = `"72.00000"`;
exports[`面域分析测试 67`] = `"72.00000"`;
exports[`面域分析测试 67`] = `"764.50552"`;
exports[`面域分析测试 68`] = `"257.58412"`;
exports[`面域分析测试 68`] = `"501.70674"`;
exports[`面域分析测试 69`] = `"501.70674"`;
exports[`面域分析测试 70`] = `"501.70674"`;
exports[`面域分析测试 70`] = `"764.50552"`;
exports[`面域分析测试 71`] = `"764.50552"`;
exports[`面域分析测试 71`] = `"492.41588"`;
exports[`面域分析测试 72`] = `"492.41588"`;
exports[`面域分析测试 72`] = `"1194.21226"`;
exports[`面域分析测试 73`] = `"1194.21226"`;
exports[`面域分析测试 73`] = `"728.50552"`;
exports[`面域分析测试 74`] = `"1194.21226"`;
exports[`面域分析测试 75`] = `"448.10890"`;
exports[`面域分析测试 76`] = `"658.42139"`;
exports[`面域分析测试 76`] = `"294.16864"`;
exports[`面域分析测试 77`] = `"470.92139"`;
@ -250,86 +270,88 @@ exports[`面域分析测试 124`] = `"406.14356"`;
exports[`面域分析测试 125`] = `"501.70674"`;
exports[`面域分析测试 126`] = `"406.14356"`;
exports[`面域分析测试 126`] = `"370.14356"`;
exports[`面域分析测试 127`] = `"501.70674"`;
exports[`面域分析测试 127`] = `"406.14356"`;
exports[`面域分析测试 128`] = `"477.81595"`;
exports[`面域分析测试 128`] = `"501.70674"`;
exports[`面域分析测试 129`] = `"477.81595"`;
exports[`面域分析测试 130`] = `"835.85030"`;
exports[`面域分析测试 130`] = `"477.81595"`;
exports[`面域分析测试 131`] = `"465.70674"`;
exports[`面域分析测试 131`] = `"835.85030"`;
exports[`面域分析测试 132`] = `"835.85030"`;
exports[`面域分析测试 132`] = `"465.70674"`;
exports[`面域分析测试 133`] = `"883.63189"`;
exports[`面域分析测试 133`] = `"835.85030"`;
exports[`面域分析测试 134`] = `"72.00000"`;
exports[`面域分析测试 134`] = `"883.63189"`;
exports[`面域分析测试 135`] = `"72.00000"`;
exports[`面域分析测试 136`] = `"501.70674"`;
exports[`面域分析测试 136`] = `"72.00000"`;
exports[`面域分析测试 137`] = `"393.41236"`;
exports[`面域分析测试 137`] = `"501.70674"`;
exports[`面域分析测试 138`] = `"501.70674"`;
exports[`面域分析测试 138`] = `"393.41236"`;
exports[`面域分析测试 139`] = `"437.71933"`;
exports[`面域分析测试 139`] = `"501.70674"`;
exports[`面域分析测试 140`] = `"72.00000"`;
exports[`面域分析测试 140`] = `"437.71933"`;
exports[`面域分析测试 141`] = `"72.00000"`;
exports[`面域分析测试 142`] = `"477.81595"`;
exports[`面域分析测试 142`] = `"72.00000"`;
exports[`面域分析测试 143`] = `"406.14356"`;
exports[`面域分析测试 143`] = `"477.81595"`;
exports[`面域分析测试 144`] = `"406.14356"`;
exports[`面域分析测试 145`] = `"477.81595"`;
exports[`面域分析测试 145`] = `"406.14356"`;
exports[`面域分析测试 146`] = `"811.95950"`;
exports[`面域分析测试 146`] = `"477.81595"`;
exports[`面域分析测试 147`] = `"811.95950"`;
exports[`面域分析测试 148`] = `"72.00000"`;
exports[`面域分析测试 148`] = `"811.95950"`;
exports[`面域分析测试 149`] = `"72.00000"`;
exports[`面域分析测试 150`] = `"477.81595"`;
exports[`面域分析测试 150`] = `"72.00000"`;
exports[`面域分析测试 151`] = `"393.41236"`;
exports[`面域分析测试 151`] = `"477.81595"`;
exports[`面域分析测试 152`] = `"437.71933"`;
exports[`面域分析测试 152`] = `"393.41236"`;
exports[`面域分析测试 153`] = `"477.81595"`;
exports[`面域分析测试 153`] = `"437.71933"`;
exports[`面域分析测试 154`] = `"72.00000"`;
exports[`面域分析测试 154`] = `"477.81595"`;
exports[`面域分析测试 155`] = `"406.14356"`;
exports[`面域分析测试 155`] = `"72.00000"`;
exports[`面域分析测试 156`] = `"406.14356"`;
exports[`面域分析测试 157`] = `"740.28711"`;
exports[`面域分析测试 157`] = `"406.14356"`;
exports[`面域分析测试 158`] = `"370.14356"`;
exports[`面域分析测试 158`] = `"740.28711"`;
exports[`面域分析测试 159`] = `"72.00000"`;
exports[`面域分析测试 159`] = `"370.14356"`;
exports[`面域分析测试 160`] = `"72.00000"`;
exports[`面域分析测试 161`] = `"393.41236"`;
exports[`面域分析测试 161`] = `"72.00000"`;
exports[`面域分析测试 162`] = `"406.14356"`;
exports[`面域分析测试 162`] = `"393.41236"`;
exports[`面域分析测试 163`] = `"406.14356"`;
exports[`面域分析测试 164`] = `"437.71933"`;
exports[`面域分析测试 164`] = `"406.14356"`;
exports[`面域分析测试 165`] = `"437.71933"`;
exports[`面域分析测试 165`] = `"72.00000"`;
exports[`面域分析测试 166`] = `"72.00000"`;
exports[`面域分析测试 166`] = `"393.41236"`;
exports[`面域分析测试 167`] = `"393.41236"`;
exports[`面域分析测试 167`] = `"437.71933"`;
exports[`面域分析测试 168`] = `"437.71933"`;

File diff suppressed because one or more lines are too long

@ -18,3 +18,17 @@ test('面域分析测试', () =>
expect(pl.Length).toMatchNumberSnapshot();
}
});
test('因为顶点精度问题导致的角度精度问题', () =>
{
let cus = LoadCurvesFromFileData(require("./curves2.json"));
let reg = new RegionParse(cus);
expect(reg.RegionsOutline.length).toMatchSnapshot();
expect(reg.RegionsInternal.length).toMatchSnapshot();
for (let routes of [...reg.RegionsOutline, ...reg.RegionsInternal])
{
let pl = Polyline.Combine(routes.map(r => r.curve), 1e-3);
expect(pl.Length).toMatchNumberSnapshot();
}
});

@ -154,7 +154,7 @@ export class Command_Curve2Polyline implements Command
let parse = new RegionParse(curves2);
for (let rs of parse.RegionsInternal)
this.Draw(rs, group.ocs, true);
this.Draw(rs, group.ocs, this.IsOnlySaveSmall);
if (this.IsSaveMax)
for (let rs of parse.RegionsOutline)
@ -251,7 +251,7 @@ export function CurveInOCS(curve: Curve, Ocs: Matrix4, OcsInv: Matrix4): boolean
let cus = curve.Explode();
return cus.every(c =>
{
return this.CurveInOCS(c, Ocs, OcsInv);
return CurveInOCS(c, Ocs, OcsInv);
});
}
}

@ -61,7 +61,7 @@ export class CurveMap
* @param [removeDuplicate=false]
* @returns ?
*/
AddCurveToMap(curve: Curve, isArc: boolean = curve instanceof Arc, removeDuplicate: boolean = false): boolean
AddCurveToMap(curve: Curve, isArc: boolean = curve instanceof Arc, removeDuplicate: boolean = false, parseAngle = false): boolean
{
let sp = curve.StartPoint;
let ep = curve.EndPoint;
@ -92,9 +92,9 @@ export class CurveMap
let routeS2E: Route = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep };
let routeE2S: Route = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep };
if (!isArc)
if (!isArc && parseAngle)
{
let an = angle(ep.clone().sub(sp));
let an = angle(endS.position.clone().sub(startS.position));
routeS2E.an = an;
routeE2S.an = clampRad(an + Math.PI);
}

@ -189,15 +189,15 @@ export class RegionParse
let arcs = this.BreakArc(cu);
if (arcs.length > 1)
{
arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate));
arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true));
this.ExpLineMap.set(cu, arcs);
continue;
}
else
curveMap.AddCurveToMap(cu, true, this.removeDuplicate);
curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true);
}
else
curveMap.AddCurveToMap(cu, false, this.removeDuplicate);
curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true);
}
//排序,根据角度逆时针排序.

Loading…
Cancel
Save