bezierSmooth method
Smooths Line3 using bezier smoothing algorithm.
Implementation
List<Line3> bezierSmooth() {
if (length <= 1) return this;
const smooth = 0.1;
final result = <Line3>[];
result.add(this[0]);
for (var i = 1; i < length - 1; i += 1) {
final previous = this[i - 1].a;
final next = this[i + 1].b;
final currentA = this[i].a;
final currentB = this[i].b;
final controlA = Vector3(
currentA.x - (previous.x - currentA.x) * smooth,
currentA.y - (previous.y - currentA.y) * smooth,
currentA.z - (previous.z - currentA.z) * smooth,
);
final controlB = Vector3(
currentB.x - (next.x - currentB.x) * smooth,
currentB.y - (next.y - currentB.y) * smooth,
currentB.z - (next.z - currentB.z) * smooth,
);
final lines = [0.0, 0.3, 0.6, 1.0];
lines
.map((e) => _bezier4(currentA, controlA, controlB, currentB, e))
.toList()
.windowedWithStep(2, 1)
.map((e) => Line3(e.elementAt(0), e.elementAt(1)))
.forEach((element) => result.add(element));
}
result.add(this[length - 1]);
return result;
}