@@ -2,13 +2,6 @@ import 'dart:math';
2
2
3
3
import 'package:flutter/material.dart' ;
4
4
5
- //Code snips
6
- // print("""distance == sqrt(2) \n
7
- // | Displacement: $displacement \n
8
- // | currentDistance($currentDistance) = distance($distance) * defaultSpacing($defaultSpacing) \n
9
- // | desiredDistance($desiredDistance) = defaultSpacing($defaultSpacing) * expansionAmount($expansionAmount)
10
- // """);
11
-
12
5
class CirclesHomeWidget extends StatelessWidget {
13
6
const CirclesHomeWidget ({Key ? key}) : super (key: key);
14
7
@@ -85,6 +78,13 @@ class CircleGridPainter extends CustomPainter {
85
78
final int ? selectedIndex;
86
79
final int columns;
87
80
81
+ static const double maxDisplacementDistance =
82
+ 6.0 ; // Maximum distance for displacement effect
83
+ static const double fullDisplacementDistance =
84
+ 0.5 ; // Distance for full displacement
85
+ static const double falloffExponent =
86
+ 1.0 ; // Controls the steepness of falloff
87
+
88
88
CircleGridPainter ({
89
89
required this .offset,
90
90
required this .circleSize,
@@ -161,12 +161,20 @@ class CircleGridPainter extends CustomPainter {
161
161
double distance = sqrt (dx * dx + dy * dy);
162
162
double angle = atan2 (dy.toDouble (), dx.toDouble ());
163
163
164
- // Replace this line with the fixed version
165
- // double displacement =
166
- // _getDisplacement(distance, expansionAmount, defaultSpacing);
164
+ // Determine if the circle is diagonal or orthogonal
165
+ bool isDiagonal = dx != 0 && dy != 0 ;
166
+
167
+ // Calculate the base displacement
167
168
double displacement =
168
169
_getDisplacementFixed (distance, expansionAmount, defaultSpacing);
169
170
171
+ // diagonal adjustment
172
+ if (isDiagonal) {
173
+ double diagonalCorrectionFactor =
174
+ 0.1 ; // or use 1 / sqrt(2) ≈ 0.707 for exact diagonal adjustment
175
+ displacement *= diagonalCorrectionFactor;
176
+ }
177
+
170
178
if (displacement > 0 ) {
171
179
displacements[Point (col, row)] = Offset (
172
180
cos (angle) * displacement,
@@ -175,48 +183,6 @@ class CircleGridPainter extends CustomPainter {
175
183
}
176
184
}
177
185
178
- // double _getDisplacement(
179
- // double distance, double expansionAmount, double defaultSpacing) {
180
- // if (distance % 1 == 0 && distance >= 1) {
181
- // return expansionAmount;
182
- // } else if (distance <= sqrt(2) ||
183
- // distance <= sqrt(5) ||
184
- // distance <= sqrt(10) ||
185
- // distance <= sqrt(13)) {
186
- // double currentDistance = distance * defaultSpacing;
187
- // double desiredDistance = defaultSpacing + expansionAmount;
188
- // return currentDistance < desiredDistance
189
- // ? desiredDistance - currentDistance
190
- // : 0;
191
- // }
192
- // return 0;
193
- // }
194
-
195
- // Suggested fix
196
- // double _getDisplacementFixed(
197
- // double distance, double expansionAmount, double defaultSpacing) {
198
- // if (distance % 1 == 0 && distance >= 1) {
199
- // return expansionAmount;
200
- // } else if (distance <= sqrt(2)) {
201
- // double currentDistance = distance * defaultSpacing;
202
- // double desiredDistance = defaultSpacing + expansionAmount;
203
- // return currentDistance < desiredDistance
204
- // ? desiredDistance - currentDistance
205
- // : 0;
206
- // } else if (distance % 1 == 0 && distance >= 2) {
207
- // return expansionAmount;
208
- // } else {
209
- // return 0;
210
- // }
211
- // }
212
-
213
- static const double maxDisplacementDistance =
214
- 6.0 ; // Maximum distance for displacement effect
215
- static const double fullDisplacementDistance =
216
- 0.5 ; // Distance for full displacement
217
- static const double falloffExponent =
218
- 1.0 ; // Controls the steepness of falloff
219
-
220
186
double _getDisplacementFixed (
221
187
double distance, double expansionAmount, double defaultSpacing) {
222
188
if (distance <= maxDisplacementDistance) {
0 commit comments