File size: 3,797 Bytes
01b44ac
8d2aac4
fb2e9b3
 
 
37c899c
fb2e9b3
 
 
8d2aac4
fb2e9b3
8d2aac4
fb2e9b3
 
 
 
 
 
 
8d2aac4
37c899c
fb2e9b3
 
37c899c
fb2e9b3
0773e01
 
 
 
 
fb2e9b3
0773e01
fb2e9b3
0773e01
 
fb2e9b3
 
 
c8bc3b1
 
fb2e9b3
c8bc3b1
 
 
 
fb2e9b3
c8bc3b1
37c899c
c8bc3b1
 
 
 
 
 
 
 
 
37c899c
 
 
 
 
 
 
 
fb2e9b3
37c899c
 
 
c8bc3b1
37c899c
 
 
c8bc3b1
fb2e9b3
37c899c
 
 
 
 
 
 
 
c8bc3b1
fb2e9b3
 
c8bc3b1
fb2e9b3
37c899c
01b44ac
765e25a
37c899c
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
81
82
83
84
85
86
87
88
89
90
91
92
import streamlit as st
import base64
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon, Circle

def set_background(video_path):
    """Sets the background of the Streamlit app to a video."""
    with open(video_path, "rb") as video_file:
        video_bytes = video_file.read()
    video_base64 = base64.b64encode(video_bytes).decode("utf-8")
    video_html = f"""
        <style>
        .main {{
        background-image: url("data:video/mp4;base64,{video_base64}");
        background-size: cover;
        }}
        </style>
        """
    st.markdown(video_html, unsafe_allow_html=True)

# Set the background *before* any other Streamlit elements
set_background("numbers moving background.mp4")  # Replace with your video path

# --- Triangle Calculation and Plotting Functions ---
def calculate_distance(x1, y1, x2, y2):
    return np.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)

def calculate_angle(a, b, c):
    try:
        angle = np.degrees(np.arccos((b ** 2 + c ** 2 - a ** 2) / (2 * b * c)))
    except ValueError:
        angle = 0
    return angle

# ... (rest of your calculation functions: calculate_area, calculate_perimeter,
# calculate_radius_inscribed_circle, calculate_radius_circumscribed_circle,
# calculate_centroid, calculate_incenter, calculate_circumcenter, calculate_midpoints, format_zero)

def plot_triangle(x1, y1, x2, y2, x3, y3, I_x, I_y, U_x, U_y, G_x, G_y, midpoints, a, b, c):
    # ... (your plot_triangle function - no changes needed here)

def is_valid_triangle(a, b, c):
    return a + b > c and b + c > a and c + a > b

# --- Main Streamlit App ---
def main():
    st.title("Advanced Triangle Solver")

    st.sidebar.header("Enter the coordinates of the three points:")
    x1 = st.sidebar.number_input("X1", min_value=-100.0, max_value=100.0, step=0.1, format="%.3f")
    y1 = st.sidebar.number_input("Y1", min_value=-100.0, max_value=100.0, step=0.1, format="%.3f")
    x2 = st.sidebar.number_input("X2", min_value=-100.0, max_value=100.0, step=0.1, format="%.3f")
    y2 = st.sidebar.number_input("Y2", min_value=-100.0, max_value=100.0, step=0.1, format="%.3f")
    x3 = st.sidebar.number_input("X3", min_value=-100.0, max_value=100.0, step=0.1, format="%.3f")
    y3 = st.sidebar.number_input("Y3", min_value=-100.0, max_value=100.0, step=0.1, format="%.3f")

    if st.sidebar.button("Calculate"):
        a = calculate_distance(x2, y2, x3, y3)
        b = calculate_distance(x1, y1, x3, y3)
        c = calculate_distance(x1, y1, x2, y2)

        if not is_valid_triangle(a, b, c):
            st.error("The entered points do not form a valid triangle.")
            return

        A = calculate_angle(a, b, c)
        B = calculate_angle(b, a, c)
        C = calculate_angle(c, a, b)

        if abs(A + B + C - 180) > 1e-2:
            st.error("The sum of the angles is not 180 degrees.")
            return

        # ... (rest of your calculations for area, perimeter, radii, centroid, incenter, circumcenter)
        area = calculate_area(a, b, c)
        perimeter = calculate_perimeter(a, b, c)
        radius_in = calculate_radius_inscribed_circle(a, b, c)
        radius_circum = calculate_radius_circumscribed_circle(a, b, c)
        G_x, G_y = calculate_centroid(x1, y1, x2, y2, x3, y3)
        I_x, I_y = calculate_incenter(x1, y1, x2, y2, x3, y3, a, b, c)
        U_x, U_y = calculate_circumcenter(x1, y1, x2, y2, x3, y3, a, b, c)
        midpoints = calculate_midpoints(x1, y1, x2, y2, x3, y3)

        # Display results (no changes needed here)
        # ... (your existing display code using st.columns, st.subheader, st.markdown)

        # Plot the triangle
        plot_triangle(x1, y1, x2, y2, x3, y3, I_x, I_y, U_x, U_y, G_x, G_y, midpoints, a, b, c)

if __name__ == "__main__":
    main()