Update app.py
Browse files
app.py
CHANGED
@@ -1,21 +1,45 @@
|
|
1 |
import streamlit as st
|
2 |
import matplotlib.pyplot as plt
|
3 |
import numpy as np
|
|
|
4 |
|
5 |
-
#
|
6 |
golden_ratio = (1 + np.sqrt(5)) / 2
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
def generate_colored_circle_template(num_circles):
|
9 |
fig, ax = plt.subplots(figsize=(6, 6))
|
10 |
ax.set_xlim(0, 1)
|
11 |
ax.set_ylim(0, 1)
|
12 |
ax.axis('off')
|
13 |
|
14 |
-
for
|
15 |
radius = np.random.uniform(0.05, 0.15)
|
16 |
center = (np.random.uniform(radius, 1-radius), np.random.uniform(radius, 1-radius))
|
17 |
-
|
18 |
-
|
|
|
|
|
19 |
ax.add_artist(circle)
|
20 |
return fig
|
21 |
|
@@ -49,14 +73,6 @@ def generate_fibonacci_spiral_layout(num_points):
|
|
49 |
ax.set_aspect('equal')
|
50 |
return fig
|
51 |
|
52 |
-
def is_prime(n):
|
53 |
-
if n <= 1:
|
54 |
-
return False
|
55 |
-
for i in range(2, int(n**0.5) + 1):
|
56 |
-
if n % i == 0:
|
57 |
-
return False
|
58 |
-
return True
|
59 |
-
|
60 |
def generate_prime_number_spiral(num_points):
|
61 |
fig, ax = plt.subplots(figsize=(6, 6))
|
62 |
ax.axis('off')
|
@@ -72,12 +88,29 @@ def generate_prime_number_spiral(num_points):
|
|
72 |
ax.set_aspect('equal')
|
73 |
return fig
|
74 |
|
75 |
-
|
76 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
|
78 |
mode = st.radio(
|
79 |
"Choose a visualization mode:",
|
80 |
-
("Random Circle Packings", "Symmetrical Circle Layouts", "Fibonacci Spiral Layout", "Prime Number Spiral")
|
81 |
)
|
82 |
|
83 |
if mode == "Random Circle Packings":
|
@@ -92,5 +125,12 @@ elif mode == "Fibonacci Spiral Layout":
|
|
92 |
elif mode == "Prime Number Spiral":
|
93 |
num_points = st.slider("Number of Points", 10, 1000, 200)
|
94 |
fig = generate_prime_number_spiral(num_points)
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
|
96 |
-
|
|
|
|
1 |
import streamlit as st
|
2 |
import matplotlib.pyplot as plt
|
3 |
import numpy as np
|
4 |
+
import matplotlib.colors as mcolors
|
5 |
|
6 |
+
# Global constant for golden ratio
|
7 |
golden_ratio = (1 + np.sqrt(5)) / 2
|
8 |
|
9 |
+
def is_prime(n):
|
10 |
+
"""Check if a number is prime."""
|
11 |
+
if n <= 1:
|
12 |
+
return False
|
13 |
+
for i in range(2, int(n**0.5) + 1):
|
14 |
+
if n % i == 0:
|
15 |
+
return False
|
16 |
+
return True
|
17 |
+
|
18 |
+
def fib_sequence(n):
|
19 |
+
"""Generate Fibonacci sequence up to n."""
|
20 |
+
fib_seq = [0, 1]
|
21 |
+
while fib_seq[-1] + fib_seq[-2] <= n:
|
22 |
+
fib_seq.append(fib_seq[-1] + fib_seq[-2])
|
23 |
+
return fib_seq[2:] # Exclude first two numbers for this use case
|
24 |
+
|
25 |
+
def adjust_color_brightness(color, factor):
|
26 |
+
"""Darken a color by a given factor."""
|
27 |
+
color = np.array(mcolors.to_rgb(color)) * factor
|
28 |
+
return tuple(color)
|
29 |
+
|
30 |
def generate_colored_circle_template(num_circles):
|
31 |
fig, ax = plt.subplots(figsize=(6, 6))
|
32 |
ax.set_xlim(0, 1)
|
33 |
ax.set_ylim(0, 1)
|
34 |
ax.axis('off')
|
35 |
|
36 |
+
for i in range(num_circles):
|
37 |
radius = np.random.uniform(0.05, 0.15)
|
38 |
center = (np.random.uniform(radius, 1-radius), np.random.uniform(radius, 1-radius))
|
39 |
+
base_color = np.random.rand(3,)
|
40 |
+
darker_color = adjust_color_brightness(base_color, 0.5)
|
41 |
+
color_variation = base_color * (0.95 + 0.1 * np.random.rand()) # Slight color variation
|
42 |
+
circle = plt.Circle(center, radius, color=color_variation, ec=darker_color, lw=1, alpha=0.5)
|
43 |
ax.add_artist(circle)
|
44 |
return fig
|
45 |
|
|
|
73 |
ax.set_aspect('equal')
|
74 |
return fig
|
75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
def generate_prime_number_spiral(num_points):
|
77 |
fig, ax = plt.subplots(figsize=(6, 6))
|
78 |
ax.axis('off')
|
|
|
88 |
ax.set_aspect('equal')
|
89 |
return fig
|
90 |
|
91 |
+
def emoji_dynamics_and_number_theory_simulation(size):
|
92 |
+
fib_seq = fib_sequence(size**2)
|
93 |
+
grid = []
|
94 |
+
|
95 |
+
for i in range(1, size**2 + 1):
|
96 |
+
if i in fib_seq:
|
97 |
+
grid.append("🌀") # Fibonacci positions
|
98 |
+
elif is_prime(i):
|
99 |
+
grid.append("🌟") # Prime positions
|
100 |
+
else:
|
101 |
+
grid.append("⚪") # Other positions
|
102 |
+
|
103 |
+
if i % size == 0:
|
104 |
+
grid.append("\n") # Newline at the end of each row
|
105 |
+
|
106 |
+
return "".join(grid)
|
107 |
+
|
108 |
+
# Streamlit UI setup
|
109 |
+
st.title("Circle Packings and Number Theory Visualizations")
|
110 |
|
111 |
mode = st.radio(
|
112 |
"Choose a visualization mode:",
|
113 |
+
("Random Circle Packings", "Symmetrical Circle Layouts", "Fibonacci Spiral Layout", "Prime Number Spiral", "Emoji Dynamics and Number Theory Simulation")
|
114 |
)
|
115 |
|
116 |
if mode == "Random Circle Packings":
|
|
|
125 |
elif mode == "Prime Number Spiral":
|
126 |
num_points = st.slider("Number of Points", 10, 1000, 200)
|
127 |
fig = generate_prime_number_spiral(num_points)
|
128 |
+
elif mode == "Emoji Dynamics and Number Theory Simulation":
|
129 |
+
size = st.slider("Grid Size", 5, 20, 10)
|
130 |
+
simulation = emoji_dynamics_and_number_theory_simulation(size)
|
131 |
+
st.text(simulation)
|
132 |
+
else:
|
133 |
+
st.text("Select a visualization mode to display.")
|
134 |
|
135 |
+
if 'fig' in locals():
|
136 |
+
st.pyplot(fig)
|