idealpolyhedra / examples /visualization /visualize_golden_simple.py
igriv's picture
Major reorganization and feature additions
d7d27f0
import numpy as np
import matplotlib.pyplot as plt
from ideal_poly_volume_toolkit.geometry import delaunay_triangulation_indices
# The golden ratio configuration from seed 42
phi = (1 + np.sqrt(5)) / 2
z_points = np.array([
0 + 0j, # z[0]
1 + 0j, # z[1]
2.6180 + 0j, # z[2] ≈ φ²
0.5 - 1.5388j, # z[3]
2.8917 - 2.6037j, # z[4]
0.5 + 1.5388j, # z[5]
-1.6180 + 0j # z[6] ≈ -φ
])
# Get Delaunay triangulation
triangles = delaunay_triangulation_indices(z_points)
# Complex plane view with Delaunay triangulation
plt.figure(figsize=(10, 10))
# Plot points
real_coords = z_points.real
imag_coords = z_points.imag
plt.scatter(real_coords, imag_coords, s=200, c='red', zorder=5)
# Label points
for i, z in enumerate(z_points):
offset = 0.15
plt.annotate(f'z[{i}]', (z.real + offset, z.imag + offset), fontsize=12)
# Draw Delaunay triangles
for tri in triangles:
# Close the triangle by adding the first point at the end
triangle_x = [real_coords[tri[j]] for j in range(3)] + [real_coords[tri[0]]]
triangle_y = [imag_coords[tri[j]] for j in range(3)] + [imag_coords[tri[0]]]
plt.plot(triangle_x, triangle_y, 'b-', linewidth=1.5)
plt.xlabel('Real', fontsize=14)
plt.ylabel('Imaginary', fontsize=14)
plt.title('Golden Ratio Configuration in Complex Plane\nwith Delaunay Triangulation', fontsize=16)
plt.grid(True, alpha=0.3)
plt.axis('equal')
# Add circles at special radii
circle1 = plt.Circle((0, 0), phi, fill=False, linestyle='--', color='green', alpha=0.5, linewidth=2)
circle2 = plt.Circle((0, 0), phi**2, fill=False, linestyle='--', color='green', alpha=0.5, linewidth=2)
plt.gca().add_patch(circle1)
plt.gca().add_patch(circle2)
plt.text(0.1, phi + 0.2, f'r = φ ≈ {phi:.3f}', color='green', fontsize=12)
plt.text(0.1, phi**2 + 0.2, f'r = φ² ≈ {phi**2:.3f}', color='green', fontsize=12)
plt.tight_layout()
plt.savefig('golden_config_plane.png', dpi=150, bbox_inches='tight')
print("Saved: golden_config_plane.png")
# Print configuration details
print("\nConfiguration details:")
print(f"Number of vertices: {len(z_points)} (plus infinity)")
print(f"Number of triangles: {len(triangles)}")
print("\nTriangulation:")
for i, tri in enumerate(triangles):
print(f" Triangle {i}: vertices {tri}")
# Analyze special values
print("\nSpecial values in configuration:")
print(f" φ = {phi:.6f}")
print(f" φ² = {phi**2:.6f}")
print(f" 1/φ = {1/phi:.6f}")
print(f" 0.5 = 1/2")
print(f" 1.5388 ≈ √(5/2) = {np.sqrt(5/2):.4f}? No, = {1.5388:.4f}")
print(f" 1.5388 ≈ φ - 1/(2φ) = {phi - 1/(2*phi):.4f}? Close!")
# Check if z[3] and z[5] are special
z3_abs = abs(0.5 - 1.5388j)
z5_abs = abs(0.5 + 1.5388j)
print(f"\n|z[3]| = |z[5]| = {z3_abs:.6f} = φ")
plt.close()