💄 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,9 +1206,39 @@ ${b1}y &= ${c1 - a1 * x.toDouble()}
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 完整的表达式:(-b ± sqrt(delta))/denominator
|
// 完整的表达式:(-b ± sqrt(delta))/denominator
|
||||||
|
final bInt = b.toInt();
|
||||||
|
|
||||||
|
// Check if b is divisible by denominator for simplification
|
||||||
|
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 {
|
||||||
|
// Cannot simplify, use fraction form
|
||||||
|
final bStr = b > 0 ? '${bInt}' : '(${bInt})';
|
||||||
|
final signStr = isPlus ? '+' : '-';
|
||||||
final numerator = b > 0
|
final numerator = b > 0
|
||||||
? '-$bStr $sign $sqrtExpr'
|
? '-$bStr $signStr $sqrtExpr'
|
||||||
: '(${b.toInt()}) $sign $sqrtExpr';
|
: '(${bInt}) $signStr $sqrtExpr';
|
||||||
|
|
||||||
if (denominator == 2) {
|
if (denominator == 2) {
|
||||||
return '\\frac{$numerator}{2}';
|
return '\\frac{$numerator}{2}';
|
||||||
@@ -1222,6 +1247,7 @@ ${b1}y &= ${c1 - a1 * x.toDouble()}
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// 格式化复数根的虚部:sqrt(-delta)/(2a)
|
/// 格式化复数根的虚部:sqrt(-delta)/(2a)
|
||||||
String _formatImaginaryPart(String sqrtExpr, double denominator) {
|
String _formatImaginaryPart(String sqrtExpr, double denominator) {
|
||||||
|
Reference in New Issue
Block a user