Spaces:
Sleeping
Sleeping
Fix LaTeX delimeters
Browse files
app.py
CHANGED
|
@@ -39,7 +39,7 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 39 |
steps.append(f"$\\cos(A) = {cos_A:.6f}$")
|
| 40 |
A_rad = math.acos(np.clip(cos_A, -1, 1))
|
| 41 |
A = math.degrees(A_rad)
|
| 42 |
-
steps.append(f"$A = \\arccos({cos_A:.6f}) = \\mathbf{{{A:.4f}
|
| 43 |
|
| 44 |
# Find angle B: cos(B) = (a² + c² - b²) / (2ac)
|
| 45 |
steps.append(f"\n**Step 2: Find Angle B using Law of Cosines**")
|
|
@@ -51,16 +51,16 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 51 |
steps.append(f"$\\cos(B) = {cos_B:.6f}$")
|
| 52 |
B_rad = math.acos(np.clip(cos_B, -1, 1))
|
| 53 |
B = math.degrees(B_rad)
|
| 54 |
-
steps.append(f"$B = \\arccos({cos_B:.6f}) = \\mathbf{{{B:.4f}
|
| 55 |
|
| 56 |
# Find angle C: C = 180 - A - B
|
| 57 |
steps.append(f"\n**Step 3: Find Angle C using angle sum property**")
|
| 58 |
-
steps.append(f"\n$A + B + C = 180
|
| 59 |
-
steps.append(f"$C = 180
|
| 60 |
-
steps.append(f"$C = 180
|
| 61 |
C = 180 - A - B
|
| 62 |
C_rad = math.radians(C)
|
| 63 |
-
steps.append(f"$C = \\mathbf{{{C:.4f}
|
| 64 |
|
| 65 |
results.append(f"**Solution (SSS Case):**")
|
| 66 |
results.append(f"- Side a = {a:.4f}")
|
|
@@ -75,15 +75,15 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 75 |
steps.append("### 📚 Step-by-Step Solution (SAS Case)")
|
| 76 |
|
| 77 |
if a and b and C_rad:
|
| 78 |
-
steps.append(f"\n**Given:** $a = {a}$, $b = {b}$, $C = {C}
|
| 79 |
steps.append("\n---")
|
| 80 |
|
| 81 |
# Find side c: c² = a² + b² - 2ab·cos(C)
|
| 82 |
steps.append(f"\n**Step 1: Find Side c using Law of Cosines**")
|
| 83 |
steps.append(f"\n$c^2 = a^2 + b^2 - 2ab\\cos(C)$")
|
| 84 |
steps.append(f"\nSubstitute values:")
|
| 85 |
-
steps.append(f"$c^2 = {a}^2 + {b}^2 - 2({a})({b})\\cos({C}
|
| 86 |
-
steps.append(f"$c^2 = {a**2} + {b**2} - {2*a*b}\\cos({C}
|
| 87 |
c_squared = a**2 + b**2 - 2*a*b*math.cos(C_rad)
|
| 88 |
steps.append(f"$c^2 = {a**2} + {b**2} - {2*a*b*math.cos(C_rad):.6f}$")
|
| 89 |
steps.append(f"$c^2 = {c_squared:.6f}$")
|
|
@@ -99,25 +99,25 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 99 |
steps.append(f"$\\cos(A) = {cos_A:.6f}$")
|
| 100 |
A_rad = math.acos(np.clip(cos_A, -1, 1))
|
| 101 |
A = math.degrees(A_rad)
|
| 102 |
-
steps.append(f"$A = \\arccos({cos_A:.6f}) = \\mathbf{{{A:.4f}
|
| 103 |
|
| 104 |
# Find angle B
|
| 105 |
steps.append(f"\n**Step 3: Find Angle B using angle sum property**")
|
| 106 |
-
steps.append(f"$B = 180
|
| 107 |
-
steps.append(f"$B = 180
|
| 108 |
B = 180 - A - C
|
| 109 |
B_rad = math.radians(B)
|
| 110 |
-
steps.append(f"$B = \\mathbf{{{B:.4f}
|
| 111 |
|
| 112 |
elif a and c and B_rad:
|
| 113 |
-
steps.append(f"\n**Given:** $a = {a}$, $c = {c}$, $B = {B}
|
| 114 |
steps.append("\n---")
|
| 115 |
|
| 116 |
# Find side b: b² = a² + c² - 2ac·cos(B)
|
| 117 |
steps.append(f"\n**Step 1: Find Side b using Law of Cosines**")
|
| 118 |
steps.append(f"\n$b^2 = a^2 + c^2 - 2ac\\cos(B)$")
|
| 119 |
steps.append(f"\nSubstitute values:")
|
| 120 |
-
steps.append(f"$b^2 = {a}^2 + {c}^2 - 2({a})({c})\\cos({B}
|
| 121 |
b_squared = a**2 + c**2 - 2*a*c*math.cos(B_rad)
|
| 122 |
steps.append(f"$b^2 = {b_squared:.6f}$")
|
| 123 |
b = math.sqrt(b_squared)
|
|
@@ -130,24 +130,24 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 130 |
steps.append(f"$\\cos(A) = {cos_A:.6f}$")
|
| 131 |
A_rad = math.acos(np.clip(cos_A, -1, 1))
|
| 132 |
A = math.degrees(A_rad)
|
| 133 |
-
steps.append(f"$A = \\mathbf{{{A:.4f}
|
| 134 |
|
| 135 |
# Find angle C
|
| 136 |
steps.append(f"\n**Step 3: Find Angle C**")
|
| 137 |
-
steps.append(f"$C = 180
|
| 138 |
C = 180 - A - B
|
| 139 |
C_rad = math.radians(C)
|
| 140 |
-
steps.append(f"$C = \\mathbf{{{C:.4f}
|
| 141 |
|
| 142 |
elif b and c and A_rad:
|
| 143 |
-
steps.append(f"\n**Given:** $b = {b}$, $c = {c}$, $A = {A}
|
| 144 |
steps.append("\n---")
|
| 145 |
|
| 146 |
# Find side a: a² = b² + c² - 2bc·cos(A)
|
| 147 |
steps.append(f"\n**Step 1: Find Side a using Law of Cosines**")
|
| 148 |
steps.append(f"\n$a^2 = b^2 + c^2 - 2bc\\cos(A)$")
|
| 149 |
steps.append(f"\nSubstitute values:")
|
| 150 |
-
steps.append(f"$a^2 = {b}^2 + {c}^2 - 2({b})({c})\\cos({A}
|
| 151 |
a_squared = b**2 + c**2 - 2*b*c*math.cos(A_rad)
|
| 152 |
steps.append(f"$a^2 = {a_squared:.6f}$")
|
| 153 |
a = math.sqrt(a_squared)
|
|
@@ -160,14 +160,14 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 160 |
steps.append(f"$\\cos(B) = {cos_B:.6f}$")
|
| 161 |
B_rad = math.acos(np.clip(cos_B, -1, 1))
|
| 162 |
B = math.degrees(B_rad)
|
| 163 |
-
steps.append(f"$B = \\mathbf{{{B:.4f}
|
| 164 |
|
| 165 |
# Find angle C
|
| 166 |
steps.append(f"\n**Step 3: Find Angle C**")
|
| 167 |
-
steps.append(f"$C = 180
|
| 168 |
C = 180 - A - B
|
| 169 |
C_rad = math.radians(C)
|
| 170 |
-
steps.append(f"$C = \\mathbf{{{C:.4f}
|
| 171 |
|
| 172 |
results.append(f"**Solution (SAS Case):**")
|
| 173 |
results.append(f"- Side a = {a:.4f}")
|
|
@@ -183,44 +183,44 @@ def solve_law_of_cosines(a, b, c, A, B, C):
|
|
| 183 |
|
| 184 |
# First find the third angle
|
| 185 |
if A and B:
|
| 186 |
-
steps.append(f"\n**Given:** $A = {A}
|
| 187 |
steps.append("\n---")
|
| 188 |
steps.append(f"\n**Step 1: Find Angle C**")
|
| 189 |
-
steps.append(f"$A + B + C = 180
|
| 190 |
-
steps.append(f"$C = 180
|
| 191 |
-
steps.append(f"$C = 180
|
| 192 |
C = 180 - A - B
|
| 193 |
C_rad = math.radians(C)
|
| 194 |
-
steps.append(f"$C = \\mathbf{{{C:.4f}
|
| 195 |
elif A and C:
|
| 196 |
-
steps.append(f"\n**Given:** $A = {A}
|
| 197 |
steps.append("\n---")
|
| 198 |
steps.append(f"\n**Step 1: Find Angle B**")
|
| 199 |
-
steps.append(f"$B = 180
|
| 200 |
B = 180 - A - C
|
| 201 |
B_rad = math.radians(B)
|
| 202 |
-
steps.append(f"$B = \\mathbf{{{B:.4f}
|
| 203 |
elif B and C:
|
| 204 |
-
steps.append(f"\n**Given:** $B = {B}
|
| 205 |
steps.append("\n---")
|
| 206 |
steps.append(f"\n**Step 1: Find Angle A**")
|
| 207 |
-
steps.append(f"$A = 180
|
| 208 |
A = 180 - B - C
|
| 209 |
A_rad = math.radians(A)
|
| 210 |
-
steps.append(f"$A = \\mathbf{{{A:.4f}
|
| 211 |
|
| 212 |
# Use Law of Sines to find other sides
|
| 213 |
if a:
|
| 214 |
steps.append(f"\n**Step 2: Find Side b using Law of Sines**")
|
| 215 |
steps.append(f"\n$\\frac{{a}}{{\\sin(A)}} = \\frac{{b}}{{\\sin(B)}}$")
|
| 216 |
steps.append(f"$b = a \\times \\frac{{\\sin(B)}}{{\\sin(A)}}$")
|
| 217 |
-
steps.append(f"$b = {a} \\times \\frac{{\\sin({B:.4f}
|
| 218 |
b = a * math.sin(B_rad) / math.sin(A_rad)
|
| 219 |
steps.append(f"$b = \\mathbf{{{b:.4f}}}$")
|
| 220 |
|
| 221 |
steps.append(f"\n**Step 3: Find Side c using Law of Sines**")
|
| 222 |
steps.append(f"$c = a \\times \\frac{{\\sin(C)}}{{\\sin(A)}}$")
|
| 223 |
-
steps.append(f"$c = {a} \\times \\frac{{\\sin({C:.4f}
|
| 224 |
c = a * math.sin(C_rad) / math.sin(A_rad)
|
| 225 |
steps.append(f"$c = \\mathbf{{{c:.4f}}}$")
|
| 226 |
|
|
@@ -339,6 +339,12 @@ def process_inputs(a_input, b_input, c_input, A_input, B_input, C_input):
|
|
| 339 |
|
| 340 |
return solve_law_of_cosines(a, b, c, A, B, C)
|
| 341 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 342 |
# Create Gradio interface
|
| 343 |
with gr.Blocks(title="Law of Cosines Solver") as app:
|
| 344 |
gr.Markdown("""
|
|
@@ -374,12 +380,12 @@ with gr.Blocks(title="Law of Cosines Solver") as app:
|
|
| 374 |
|
| 375 |
with gr.Row():
|
| 376 |
with gr.Column(scale=1):
|
| 377 |
-
result_output = gr.Markdown(label="Results")
|
| 378 |
with gr.Column(scale=2):
|
| 379 |
plot_output = gr.Plot(label="Triangle Visualization")
|
| 380 |
|
| 381 |
gr.Markdown("---")
|
| 382 |
-
steps_output = gr.Markdown(label="Step-by-Step Solution")
|
| 383 |
|
| 384 |
# Examples
|
| 385 |
gr.Markdown("### 📝 Example Cases")
|
|
|
|
| 39 |
steps.append(f"$\\cos(A) = {cos_A:.6f}$")
|
| 40 |
A_rad = math.acos(np.clip(cos_A, -1, 1))
|
| 41 |
A = math.degrees(A_rad)
|
| 42 |
+
steps.append(f"$A = \\arccos({cos_A:.6f}) = \\mathbf{{{A:.4f}^\\circ}}$")
|
| 43 |
|
| 44 |
# Find angle B: cos(B) = (a² + c² - b²) / (2ac)
|
| 45 |
steps.append(f"\n**Step 2: Find Angle B using Law of Cosines**")
|
|
|
|
| 51 |
steps.append(f"$\\cos(B) = {cos_B:.6f}$")
|
| 52 |
B_rad = math.acos(np.clip(cos_B, -1, 1))
|
| 53 |
B = math.degrees(B_rad)
|
| 54 |
+
steps.append(f"$B = \\arccos({cos_B:.6f}) = \\mathbf{{{B:.4f}^\\circ}}$")
|
| 55 |
|
| 56 |
# Find angle C: C = 180 - A - B
|
| 57 |
steps.append(f"\n**Step 3: Find Angle C using angle sum property**")
|
| 58 |
+
steps.append(f"\n$A + B + C = 180^\\circ$")
|
| 59 |
+
steps.append(f"$C = 180^\\circ - A - B$")
|
| 60 |
+
steps.append(f"$C = 180^\\circ - {A:.4f}^\\circ - {B:.4f}^\\circ$")
|
| 61 |
C = 180 - A - B
|
| 62 |
C_rad = math.radians(C)
|
| 63 |
+
steps.append(f"$C = \\mathbf{{{C:.4f}^\\circ}}$")
|
| 64 |
|
| 65 |
results.append(f"**Solution (SSS Case):**")
|
| 66 |
results.append(f"- Side a = {a:.4f}")
|
|
|
|
| 75 |
steps.append("### 📚 Step-by-Step Solution (SAS Case)")
|
| 76 |
|
| 77 |
if a and b and C_rad:
|
| 78 |
+
steps.append(f"\n**Given:** $a = {a}$, $b = {b}$, $C = {C}^\\circ$")
|
| 79 |
steps.append("\n---")
|
| 80 |
|
| 81 |
# Find side c: c² = a² + b² - 2ab·cos(C)
|
| 82 |
steps.append(f"\n**Step 1: Find Side c using Law of Cosines**")
|
| 83 |
steps.append(f"\n$c^2 = a^2 + b^2 - 2ab\\cos(C)$")
|
| 84 |
steps.append(f"\nSubstitute values:")
|
| 85 |
+
steps.append(f"$c^2 = {a}^2 + {b}^2 - 2({a})({b})\\cos({C}^\\circ)$")
|
| 86 |
+
steps.append(f"$c^2 = {a**2} + {b**2} - {2*a*b}\\cos({C}^\\circ)$")
|
| 87 |
c_squared = a**2 + b**2 - 2*a*b*math.cos(C_rad)
|
| 88 |
steps.append(f"$c^2 = {a**2} + {b**2} - {2*a*b*math.cos(C_rad):.6f}$")
|
| 89 |
steps.append(f"$c^2 = {c_squared:.6f}$")
|
|
|
|
| 99 |
steps.append(f"$\\cos(A) = {cos_A:.6f}$")
|
| 100 |
A_rad = math.acos(np.clip(cos_A, -1, 1))
|
| 101 |
A = math.degrees(A_rad)
|
| 102 |
+
steps.append(f"$A = \\arccos({cos_A:.6f}) = \\mathbf{{{A:.4f}^\\circ}}$")
|
| 103 |
|
| 104 |
# Find angle B
|
| 105 |
steps.append(f"\n**Step 3: Find Angle B using angle sum property**")
|
| 106 |
+
steps.append(f"$B = 180^\\circ - A - C$")
|
| 107 |
+
steps.append(f"$B = 180^\\circ - {A:.4f}^\\circ - {C}^\\circ$")
|
| 108 |
B = 180 - A - C
|
| 109 |
B_rad = math.radians(B)
|
| 110 |
+
steps.append(f"$B = \\mathbf{{{B:.4f}^\\circ}}$")
|
| 111 |
|
| 112 |
elif a and c and B_rad:
|
| 113 |
+
steps.append(f"\n**Given:** $a = {a}$, $c = {c}$, $B = {B}^\\circ$")
|
| 114 |
steps.append("\n---")
|
| 115 |
|
| 116 |
# Find side b: b² = a² + c² - 2ac·cos(B)
|
| 117 |
steps.append(f"\n**Step 1: Find Side b using Law of Cosines**")
|
| 118 |
steps.append(f"\n$b^2 = a^2 + c^2 - 2ac\\cos(B)$")
|
| 119 |
steps.append(f"\nSubstitute values:")
|
| 120 |
+
steps.append(f"$b^2 = {a}^2 + {c}^2 - 2({a})({c})\\cos({B}^\\circ)$")
|
| 121 |
b_squared = a**2 + c**2 - 2*a*c*math.cos(B_rad)
|
| 122 |
steps.append(f"$b^2 = {b_squared:.6f}$")
|
| 123 |
b = math.sqrt(b_squared)
|
|
|
|
| 130 |
steps.append(f"$\\cos(A) = {cos_A:.6f}$")
|
| 131 |
A_rad = math.acos(np.clip(cos_A, -1, 1))
|
| 132 |
A = math.degrees(A_rad)
|
| 133 |
+
steps.append(f"$A = \\mathbf{{{A:.4f}^\\circ}}$")
|
| 134 |
|
| 135 |
# Find angle C
|
| 136 |
steps.append(f"\n**Step 3: Find Angle C**")
|
| 137 |
+
steps.append(f"$C = 180^\\circ - A - B$")
|
| 138 |
C = 180 - A - B
|
| 139 |
C_rad = math.radians(C)
|
| 140 |
+
steps.append(f"$C = \\mathbf{{{C:.4f}^\\circ}}$")
|
| 141 |
|
| 142 |
elif b and c and A_rad:
|
| 143 |
+
steps.append(f"\n**Given:** $b = {b}$, $c = {c}$, $A = {A}^\\circ$")
|
| 144 |
steps.append("\n---")
|
| 145 |
|
| 146 |
# Find side a: a² = b² + c² - 2bc·cos(A)
|
| 147 |
steps.append(f"\n**Step 1: Find Side a using Law of Cosines**")
|
| 148 |
steps.append(f"\n$a^2 = b^2 + c^2 - 2bc\\cos(A)$")
|
| 149 |
steps.append(f"\nSubstitute values:")
|
| 150 |
+
steps.append(f"$a^2 = {b}^2 + {c}^2 - 2({b})({c})\\cos({A}^\\circ)$")
|
| 151 |
a_squared = b**2 + c**2 - 2*b*c*math.cos(A_rad)
|
| 152 |
steps.append(f"$a^2 = {a_squared:.6f}$")
|
| 153 |
a = math.sqrt(a_squared)
|
|
|
|
| 160 |
steps.append(f"$\\cos(B) = {cos_B:.6f}$")
|
| 161 |
B_rad = math.acos(np.clip(cos_B, -1, 1))
|
| 162 |
B = math.degrees(B_rad)
|
| 163 |
+
steps.append(f"$B = \\mathbf{{{B:.4f}^\\circ}}$")
|
| 164 |
|
| 165 |
# Find angle C
|
| 166 |
steps.append(f"\n**Step 3: Find Angle C**")
|
| 167 |
+
steps.append(f"$C = 180^\\circ - A - B$")
|
| 168 |
C = 180 - A - B
|
| 169 |
C_rad = math.radians(C)
|
| 170 |
+
steps.append(f"$C = \\mathbf{{{C:.4f}^\\circ}}$")
|
| 171 |
|
| 172 |
results.append(f"**Solution (SAS Case):**")
|
| 173 |
results.append(f"- Side a = {a:.4f}")
|
|
|
|
| 183 |
|
| 184 |
# First find the third angle
|
| 185 |
if A and B:
|
| 186 |
+
steps.append(f"\n**Given:** $A = {A}^\\circ$, $B = {B}^\\circ$, and one side")
|
| 187 |
steps.append("\n---")
|
| 188 |
steps.append(f"\n**Step 1: Find Angle C**")
|
| 189 |
+
steps.append(f"$A + B + C = 180^\\circ$")
|
| 190 |
+
steps.append(f"$C = 180^\\circ - A - B$")
|
| 191 |
+
steps.append(f"$C = 180^\\circ - {A}^\\circ - {B}^\\circ$")
|
| 192 |
C = 180 - A - B
|
| 193 |
C_rad = math.radians(C)
|
| 194 |
+
steps.append(f"$C = \\mathbf{{{C:.4f}^\\circ}}$")
|
| 195 |
elif A and C:
|
| 196 |
+
steps.append(f"\n**Given:** $A = {A}^\\circ$, $C = {C}^\\circ$, and one side")
|
| 197 |
steps.append("\n---")
|
| 198 |
steps.append(f"\n**Step 1: Find Angle B**")
|
| 199 |
+
steps.append(f"$B = 180^\\circ - A - C$")
|
| 200 |
B = 180 - A - C
|
| 201 |
B_rad = math.radians(B)
|
| 202 |
+
steps.append(f"$B = \\mathbf{{{B:.4f}^\\circ}}$")
|
| 203 |
elif B and C:
|
| 204 |
+
steps.append(f"\n**Given:** $B = {B}^\\circ$, $C = {C}^\\circ$, and one side")
|
| 205 |
steps.append("\n---")
|
| 206 |
steps.append(f"\n**Step 1: Find Angle A**")
|
| 207 |
+
steps.append(f"$A = 180^\\circ - B - C$")
|
| 208 |
A = 180 - B - C
|
| 209 |
A_rad = math.radians(A)
|
| 210 |
+
steps.append(f"$A = \\mathbf{{{A:.4f}^\\circ}}$")
|
| 211 |
|
| 212 |
# Use Law of Sines to find other sides
|
| 213 |
if a:
|
| 214 |
steps.append(f"\n**Step 2: Find Side b using Law of Sines**")
|
| 215 |
steps.append(f"\n$\\frac{{a}}{{\\sin(A)}} = \\frac{{b}}{{\\sin(B)}}$")
|
| 216 |
steps.append(f"$b = a \\times \\frac{{\\sin(B)}}{{\\sin(A)}}$")
|
| 217 |
+
steps.append(f"$b = {a} \\times \\frac{{\\sin({B:.4f}^\\circ)}}{{\\sin({A:.4f}^\\circ)}}$")
|
| 218 |
b = a * math.sin(B_rad) / math.sin(A_rad)
|
| 219 |
steps.append(f"$b = \\mathbf{{{b:.4f}}}$")
|
| 220 |
|
| 221 |
steps.append(f"\n**Step 3: Find Side c using Law of Sines**")
|
| 222 |
steps.append(f"$c = a \\times \\frac{{\\sin(C)}}{{\\sin(A)}}$")
|
| 223 |
+
steps.append(f"$c = {a} \\times \\frac{{\\sin({C:.4f}^\\circ)}}{{\\sin({A:.4f}^\\circ)}}$")
|
| 224 |
c = a * math.sin(C_rad) / math.sin(A_rad)
|
| 225 |
steps.append(f"$c = \\mathbf{{{c:.4f}}}$")
|
| 226 |
|
|
|
|
| 339 |
|
| 340 |
return solve_law_of_cosines(a, b, c, A, B, C)
|
| 341 |
|
| 342 |
+
# Define LaTeX delimiters configuration
|
| 343 |
+
latex_config = [
|
| 344 |
+
{"left": "$$", "right": "$$", "display": True},
|
| 345 |
+
{"left": "$", "right": "$", "display": False}
|
| 346 |
+
]
|
| 347 |
+
|
| 348 |
# Create Gradio interface
|
| 349 |
with gr.Blocks(title="Law of Cosines Solver") as app:
|
| 350 |
gr.Markdown("""
|
|
|
|
| 380 |
|
| 381 |
with gr.Row():
|
| 382 |
with gr.Column(scale=1):
|
| 383 |
+
result_output = gr.Markdown(label="Results", latex_delimiters=latex_config)
|
| 384 |
with gr.Column(scale=2):
|
| 385 |
plot_output = gr.Plot(label="Triangle Visualization")
|
| 386 |
|
| 387 |
gr.Markdown("---")
|
| 388 |
+
steps_output = gr.Markdown(label="Step-by-Step Solution", latex_delimiters=latex_config)
|
| 389 |
|
| 390 |
# Examples
|
| 391 |
gr.Markdown("### 📝 Example Cases")
|