💄 Better simplify
This commit is contained in:
		| @@ -1189,12 +1189,7 @@ ${b1}y &= ${c1 - a1 * x.toDouble()} | |||||||
|     double denominator, |     double denominator, | ||||||
|     bool isPlus, |     bool isPlus, | ||||||
|   ) { |   ) { | ||||||
|     final sign = isPlus ? '+' : '-'; |     final denomInt = denominator.toInt(); | ||||||
|     final bStr = b == 0 |  | ||||||
|         ? '' |  | ||||||
|         : b > 0 |  | ||||||
|         ? '${b.toInt()}' |  | ||||||
|         : '(${b.toInt()})'; |  | ||||||
|     final denomStr = denominator == 2 ? '2' : denominator.toString(); |     final denomStr = denominator == 2 ? '2' : denominator.toString(); | ||||||
|  |  | ||||||
|     // Format sqrt(delta) symbolically using the Rational value |     // Format sqrt(delta) symbolically using the Rational value | ||||||
| @@ -1211,14 +1206,45 @@ ${b1}y &= ${c1 - a1 * x.toDouble()} | |||||||
|       } |       } | ||||||
|     } else { |     } else { | ||||||
|       // 完整的表达式:(-b ± sqrt(delta))/denominator |       // 完整的表达式:(-b ± sqrt(delta))/denominator | ||||||
|       final numerator = b > 0 |       final bInt = b.toInt(); | ||||||
|           ? '-$bStr $sign $sqrtExpr' |  | ||||||
|           : '(${b.toInt()}) $sign $sqrtExpr'; |  | ||||||
|  |  | ||||||
|       if (denominator == 2) { |       // Check if b is divisible by denominator for simplification | ||||||
|         return '\\frac{$numerator}{2}'; |       if (bInt % denomInt == 0) { | ||||||
|  |         // Can simplify: b/denominator becomes integer | ||||||
|  |         final simplifiedB = bInt ~/ denomInt; | ||||||
|  |  | ||||||
|  |         if (simplifiedB == 0) { | ||||||
|  |           // Just the sqrt part with correct sign | ||||||
|  |           return isPlus ? '$sqrtExpr' : '-$sqrtExpr'; | ||||||
|  |         } else if (simplifiedB == 1) { | ||||||
|  |           // +1 * sqrt part | ||||||
|  |           return isPlus ? '1 + $sqrtExpr' : '1 - $sqrtExpr'; | ||||||
|  |         } else if (simplifiedB == -1) { | ||||||
|  |           // -1 * sqrt part | ||||||
|  |           return isPlus ? '-1 + $sqrtExpr' : '-1 - $sqrtExpr'; | ||||||
|  |         } else if (simplifiedB > 0) { | ||||||
|  |           // Positive coefficient | ||||||
|  |           return isPlus | ||||||
|  |               ? '$simplifiedB + $sqrtExpr' | ||||||
|  |               : '$simplifiedB - $sqrtExpr'; | ||||||
|  |         } else { | ||||||
|  |           // Negative coefficient | ||||||
|  |           final absB = (-simplifiedB).toString(); | ||||||
|  |           return isPlus ? '-$absB + $sqrtExpr' : '-$absB - $sqrtExpr'; | ||||||
|  |         } | ||||||
|       } else { |       } else { | ||||||
|         return '\\frac{$numerator}{$denomStr}'; |         // Cannot simplify, use fraction form | ||||||
|  |         final bStr = b > 0 ? '${bInt}' : '(${bInt})'; | ||||||
|  |         final signStr = isPlus ? '+' : '-'; | ||||||
|  |         final numerator = b > 0 | ||||||
|  |             ? '-$bStr $signStr $sqrtExpr' | ||||||
|  |             : '(${bInt}) $signStr $sqrtExpr'; | ||||||
|  |  | ||||||
|  |         if (denominator == 2) { | ||||||
|  |           return '\\frac{$numerator}{2}'; | ||||||
|  |         } else { | ||||||
|  |           return '\\frac{$numerator}{$denomStr}'; | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user