createSpiralSnake static method
List<FreeHexagon>
createSpiralSnake({
- required FreeHexagon center,
- required int count,
- double? size,
- double gap = 0.0,
- double tightness = 0.5,
创建蛇形螺旋(从中心向外)
center 中心六边形
count 六边形总数
size 六边形大小
gap 间隙
tightness 螺旋紧密度(0.0-1.0)
Implementation
static List<FreeHexagon> createSpiralSnake({
required FreeHexagon center,
required int count,
double? size,
double gap = 0.0,
double tightness = 0.5,
}) {
if (count <= 0) return [];
final hexSize = size ?? center.size;
final result = <FreeHexagon>[];
var currentHex = center;
var currentDirection = 0;
var segmentLength = 1;
var segmentProgress = 0;
var segmentCount = 0;
for (var i = 0; i < count; i++) {
final nextCenter = HexagonLayoutHelper.calculateAdjacentCenter(
sourceHex: currentHex,
sourceEdge: currentDirection,
targetSize: hexSize,
gap: gap,
);
final nextHex = FreeHexagon(
id: '${center.id}_spiral_$i',
center: nextCenter,
size: hexSize,
orientation: center.orientation,
);
result.add(nextHex);
currentHex = nextHex;
segmentProgress++;
// 螺旋逻辑:每完成一个段,转向并增加段长度
if (segmentProgress >= segmentLength) {
currentDirection = (currentDirection + 1) % 6;
segmentProgress = 0;
segmentCount++;
// 每两个段增加一次长度
if (segmentCount % 2 == 0) {
segmentLength = (segmentLength + tightness).round().clamp(1, 10);
}
}
}
return result;
}