computeEllipseAllPoints function

List<PointD> computeEllipseAllPoints({
  1. double? increment,
  2. double? cx,
  3. double? cy,
  4. double? rx,
  5. double? ry,
  6. double? offset,
  7. double? overlap,
  8. DrawConfig? config,
})

Implementation

List<PointD> computeEllipseAllPoints({
  double? increment,
  double? cx,
  double? cy,
  double? rx,
  double? ry,
  double? offset,
  double? overlap,
  DrawConfig? config,
}) {
  final List<PointD> allPoints = [];
  final double radOffset = config!.offsetSymmetric(0.5) - pi / 2;
  allPoints.add(PointD(
    config.offsetSymmetric(offset!) +
        cx! +
        0.9 * rx! * cos(radOffset - increment!),
    config.offsetSymmetric(offset) +
        cy! +
        0.9 * ry! * sin(radOffset - increment),
  ));
  for (double angle = radOffset;
      angle < (pi * 2 + radOffset - 0.01);
      angle = angle + increment) {
    allPoints.add(PointD(
      config.offsetSymmetric(offset) + cx + rx * cos(angle),
      config.offsetSymmetric(offset) + cy + ry * sin(angle),
    ));
  }
  allPoints
    ..add(PointD(
      config.offsetSymmetric(offset) +
          cx +
          rx * cos(radOffset + pi * 2 + overlap! * 0.5),
      config.offsetSymmetric(offset) +
          cy +
          ry * sin(radOffset + pi * 2 + overlap * 0.5),
    ))
    ..add(PointD(
      config.offsetSymmetric(offset) +
          cx +
          0.98 * rx * cos(radOffset + overlap),
      config.offsetSymmetric(offset) +
          cy +
          0.98 * ry * sin(radOffset + overlap),
    ))
    ..add(PointD(
      config.offsetSymmetric(offset) +
          cx +
          0.9 * rx * cos(radOffset + overlap * 0.5),
      config.offsetSymmetric(offset) +
          cy +
          0.9 * ry * sin(radOffset + overlap * 0.5),
    ));
  return allPoints;
}