You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中Circle类三点构造函数优化:避免重复计算圆心

Dart Circle类三点构造函数优化方案

在Dart的初始化列表中,字段的初始化按顺序执行。由于center在radius之前完成初始化,你可以直接在radius的初始化表达式中复用已赋值的center字段,彻底避免重复调用_getCenter方法:

import 'dart:math';

class Circle {
  final Point center;
  final double radius;

  Circle(this.center, this.radius);

  Circle.fromPoints(Point p1, Point p2, Point p3)
      : center = _getCenter(p1, p2, p3),
        radius = center.distanceTo(p1); // 直接使用已初始化的center

  static Point _getCenter(Point p1, Point p2, Point p3) {
    // 三点求圆心的实现逻辑示例
    final x1 = p1.x, y1 = p1.y;
    final x2 = p2.x, y2 = p2.y;
    final x3 = p3.x, y3 = p3.y;

    final ma = (y2 - y1) / (x2 - x1);
    final mb = (y3 - y2) / (x3 - x2);

    final cx = (ma * mb * (y1 - y3) + mb * (x1 + x2) - ma * (x2 + x3)) / (2 * (mb - ma));
    final cy = (-1 / ma) * (cx - (x1 + x2) / 2) + (y1 + y2) / 2;

    return Point(cx, cy);
  }
}

如果遇到需要同时计算多个临时值的复杂场景,还可以用立即执行的匿名函数封装一次性计算逻辑,通过返回元组解构赋值:

Circle.fromPoints(Point p1, Point p2, Point p3)
    : center = ((Point c) => c)(_getCenter(p1, p2, p3)),
      radius = ((Point c) => c.distanceTo(p1))(_getCenter(p1, p2, p3));

不过针对当前场景,第一种直接复用已初始化center的方式最为简洁高效,既消除了重复计算,又保持了代码的可读性。


内容的提问来源于stack exchange,提问作者Jan Tosovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:36:18