File size: 3,612 Bytes
0d7ff87
4c5b4cf
0d7ff87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4c5b4cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d29336a
 
 
 
 
 
 
4c5b4cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import math
import gradio as gr

def trig_identities(angle_degrees: float, identity_name: str = "pythagorean1") -> str:
    """
    Demonstrates common trigonometric identities for a given angle (in degrees).
    Args:
        angle_degrees: The angle in degrees to evaluate the identities for.
        identity_name: Name of the identity to demonstrate.
                       "pythagorean1": sin^2(x) + cos^2(x) = 1
                       "pythagorean2": 1 + tan^2(x) = sec^2(x)
                       "pythagorean3": 1 + cot^2(x) = csc^2(x)
                       "all": Show all Pythagorean identities.
                       More can be added.
    Returns:
        A string demonstrating the identity.
    """
    x_rad = math.radians(angle_degrees)
    sinx = math.sin(x_rad)
    cosx = math.cos(x_rad)
    if abs(cosx) < 1e-9:
        tanx = float('inf') if sinx > 0 else float('-inf') if sinx < 0 else 0
        secx = float('inf') if cosx >= 0 else float('-inf')
    else:
        tanx = sinx / cosx
        secx = 1 / cosx
    if abs(sinx) < 1e-9:
        cotx = float('inf') if cosx > 0 else float('-inf') if cosx < 0 else 0
        cscx = float('inf') if sinx >= 0 else float('-inf')
    else:
        cotx = cosx / sinx
        cscx = 1 / sinx
    results = []
    name = identity_name.lower()
    if name == "pythagorean1" or name == "all":
        lhs = sinx**2 + cosx**2
        results.append(f"Pythagorean Identity 1: sin^2({angle_degrees}) + cos^2({angle_degrees}) = {sinx**2:.4f} + {cosx**2:.4f} = {lhs:.4f} (Expected: 1)")
    if name == "pythagorean2" or name == "all":
        if abs(cosx) < 1e-9:
            results.append(f"Pythagorean Identity 2 (1 + tan^2(x) = sec^2(x)): Not well-defined for x={angle_degrees} degrees as cos(x) is near zero (tan(x) and sec(x) are undefined or infinite).")
        else:
            lhs = 1 + tanx**2
            rhs = secx**2
            results.append(f"Pythagorean Identity 2: 1 + tan^2({angle_degrees}) = 1 + {tanx**2:.4f} = {lhs:.4f}. sec^2({angle_degrees}) = {secx**2:.4f}. (Expected LHS = RHS)")
    if name == "pythagorean3" or name == "all":
        if abs(sinx) < 1e-9:
            results.append(f"Pythagorean Identity 3 (1 + cot^2(x) = csc^2(x)): Not well-defined for x={angle_degrees} degrees as sin(x) is near zero (cot(x) and csc(x) are undefined or infinite).")
        else:
            lhs = 1 + cotx**2
            rhs = cscx**2
            results.append(f"Pythagorean Identity 3: 1 + cot^2({angle_degrees}) = 1 + {cotx**2:.4f} = {lhs:.4f}. csc^2({angle_degrees}) = {cscx**2:.4f}. (Expected LHS = RHS)")
    if not results:
        return f"Unknown identity: {identity_name}. Available: pythagorean1, pythagorean2, pythagorean3, all."
    return "\n".join(results)

trig_identities_interface = gr.Interface(
    fn=trig_identities,
    inputs=[
        gr.Number(label="Angle (degrees)"),
        gr.Radio(
            choices=[
                ("sin²(x) + cos²(x) = 1", "pythagorean1"),
                ("1 + tan²(x) = sec²(x)", "pythagorean2"),
                ("1 + cot²(x) = csc²(x)", "pythagorean3"),
                ("All Pythagorean", "all")
            ],
            label="Trigonometric Identity to Demonstrate"
        )
    ],
    outputs="text",
    title="Trigonometric Identities Demonstrator",
    description="Show common trigonometric identities for a given angle. Select an identity and enter an angle (e.g., 45) to see the identity demonstrated with calculated values.",
    examples=[
        [45, "pythagorean1"],
        [60, "pythagorean2"],
        [30, "pythagorean3"],
        [90, "all"]
    ]
)