createDragModelMultiBC function
Implementation
DragModel createDragModelMultiBC({
required List<BCPoint> bcPoints,
required dynamic dragTable,
Weight? weight,
Distance? diameter,
Distance? length,
}) {
final wObj = weight ?? Weight.grain(0);
final dObj = diameter ?? Distance.inch(0);
final double bc = (wObj.raw > 0 && dObj.raw > 0)
? calculateSectionalDensity(wObj.in_(Unit.grain), dObj.in_(Unit.inch))
: 1.0;
final List<DragDataPoint> sourcePoints = (dragTable is DragTable)
? dragTable.points
: makeDataPoints(dragTable as List);
final sortedBCPoints = List<BCPoint>.from(bcPoints)
..sort((a, b) => a.mach.compareTo(b.mach));
final bcFactors = linearInterpolation(
sourcePoints.map((p) => p.mach).toList(),
sortedBCPoints.map((p) => p.mach).toList(),
sortedBCPoints.map((p) => p.bc / bc).toList(),
);
final adjustedTable = List<DragDataPoint>.generate(sourcePoints.length, (i) {
final factor = bcFactors[i];
return (
mach: sourcePoints[i].mach,
cd: factor > 0 ? sourcePoints[i].cd / factor : sourcePoints[i].cd,
);
});
return DragModel(
bc: bc,
dragTable: adjustedTable,
weight: wObj,
diameter: dObj,
length: length,
);
}