Efekt Moiré w oparciu o krzywe Beziera

A może to tylko wąż zbożowy .... w potrawce
To forum jest pod patronatem Kubusia czyli forumowego węża patrolowego..
ODPOWIEDZ
Awatar użytkownika
SunRiver
Użytkownik
Posty: 1546
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Festung Oppeln
Kontakt:

Efekt Moiré w oparciu o krzywe Beziera

Post autor: SunRiver »

Jak się bawić to się bawić ... Python doskonale się nadaje do zabaw różnego typu
i tym razem postanowiłem przedstawić wam niepozorny programik kreślący dwie krzywe Beziera, a następnie
połączymy wierzchołki punktów kontrolnych krzywych uzyskując tym samym interferencję nakładających się siatek
co spowoduje powstanie efektu Moiré'a .
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. # punkty kontrolne pierwszej krzywej
  5. P0_1 = np.array([0, 0])
  6. P1_1 = np.array([1, 3])
  7. P2_1 = np.array([3, 1])
  8.  
  9. # punkty kontrolne drugiej krzywej
  10. P0_2 = np.array([0, 3])
  11. P1_2 = np.array([2, 0])
  12. P2_2 = np.array([4, 3])
  13.  
  14. # liczba punktów na krzywej
  15. n_points = 250        
  16.  
  17. # wektor punktów na pierwszej krzywej
  18. t = np.linspace(0, 1, n_points)
  19. B_1 = np.zeros((n_points, 2))
  20.  
  21. # obliczanie punktów pierwszej krzywej Beziera
  22. for i in range(n_points):
  23.     B_1[i] = (1-t[i])**2 * P0_1 + 2*(1-t[i])*t[i] * P1_1 + t[i]**2 * P2_1
  24.  
  25. # wektor punktów na drugiej krzywej
  26. t = np.linspace(0, 1, n_points)
  27. B_2 = np.zeros((n_points, 2))
  28.  
  29. # obliczanie punktów drugiej krzywej Beziera
  30. for i in range(n_points):
  31.     B_2[i] = (1-t[i])**2 * P0_2 + 2*(1-t[i])*t[i] * P1_2 + t[i]**2 * P2_2
  32.  
  33. # rysowanie krzywych
  34. plt.plot(B_1[:,0], B_1[:,1], '-r')
  35. plt.plot(B_2[:,0], B_2[:,1], '-b')
  36.  
  37. # rysowanie punktów przecięcia krzywych
  38. for i in range(n_points):
  39.     plt.plot([B_1[i,0], B_2[i,0]], [B_1[i,1], B_2[i,1]], '-k', linewidth=0.5)
  40.  
  41. plt.axis('equal')
  42. plt.title('Efekt moiré na krzywych Beziera')
  43. plt.show()
  44.  
  45.  
Program jest stosunkowo prosty jak widać, wykorzystuje biblioteki NumPy i Matplotlib do wygenerowania dwóch krzywych Beziera
i pokazania ich efektu moiré poprzez rysowanie punktów przecięcia obu krzywych.
Na początku definiowane są punkty kontrolne dla dwóch krzywych, a następnie określana jest liczba punktów,
które zostaną wygenerowane na każdej z krzywych. Następnie dla każdej krzywej Beziera zostaje utworzony
wektor punktów (B_1 i B_2) za pomocą obliczenia współrzędnych kolejnych punktów na krzywej dla wartości
parametru t (równomiernie rozłożonego między 0 a 1).

W końcowej części kodu krzywe Beziera oraz punkty przecięcia obu krzywych zostają narysowane na wykresie.
Rysowanie punktów przecięcia jest realizowane w pętli, która iteruje przez każdy punkt na krzywej i łączy go
z odpowiadającym mu punktem na drugiej krzywej.

Obrazek

A tak się prezentuje efekt działania ...
Zachęcam do eksperymentów z krzywymi Beziera ...
ODPOWIEDZ

Wróć do „Python w plasterkach”