-
Notifications
You must be signed in to change notification settings - Fork 1
/
__main__.py
117 lines (94 loc) · 3.29 KB
/
__main__.py
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
"""2024-09-16
Rotating Drum 1
Estudos para a criação de uma tômbola para sorteios.
png
Sketch,py5,CreativeCoding
"""
import math
import py5
from utils import helpers
sketch = helpers.info_for_sketch(__file__, __doc__)
LADOS = []
H = 220
S = 50
B = 100
def fonte(nome: str, tamanho: float = 20.0) -> py5.Py5Font:
todas = py5.Py5Font.list()
if nome not in todas:
raise ValueError(f"Fonte {nome} não disponível")
fonte = py5.create_font(nome, tamanho)
return fonte
def cria_face(
largura: int, altura: int, fundo: py5.color, cor: py5.color, texto: str
) -> py5.Py5Graphics:
image = py5.create_graphics(largura, abs(altura), py5.P3D)
with image.begin_draw():
image.background(fundo)
image.color(cor)
image.text_font(fonte("UbuntuMonoDerivativePowerline-Regular"))
image.text_align(py5.CENTER, py5.CENTER)
image.text(texto, largura / 2, altura / 2)
return image
def desenha_cilindro(raio: float, altura: float, lados: int):
angulo_passo = py5.TWO_PI / lados # Angulo entre cada segmento
# Desenha os lados
forma = py5.create_shape()
with forma.begin_shape(py5.QUAD_STRIP):
for idx, i in enumerate(range(lados + 1)):
s = 50 if idx % 2 else 100
cor = py5.color(H, s, B)
forma.fill(cor)
forma.no_stroke()
angulo = idx * angulo_passo
x = raio * math.cos(angulo)
z = raio * math.sin(angulo)
forma.vertex(x, -altura / 2, z) # Vertex da base
forma.vertex(x, altura / 2, z) # Vertex do topo
py5.shape(forma)
# Desenha o topo do cilindro
with py5.begin_shape(py5.TRIANGLE_FAN):
py5.vertex(0, -altura / 2, 0) # Ponto central do círculo superio
for idx, i in enumerate(range(lados + 1)):
angulo = i * angulo_passo
x = raio * math.cos(angulo)
z = raio * math.sin(angulo)
py5.vertex(x, -altura / 2, z)
# Desenhamos a base do cilindro
with py5.begin_shape(py5.TRIANGLE_FAN):
py5.vertex(0, altura / 2, 0) # Ponto central da base do círculo
for idx, i in enumerate(range(lados + 1)):
angulo = i * angulo_passo
x = raio * math.cos(-angulo)
z = raio * math.sin(-angulo)
py5.vertex(x, altura / 2, z)
def setup():
global LADOS
py5.size(helpers.LARGURA, helpers.ALTURA, py5.P3D)
py5.background(0)
py5.color_mode(py5.HSB, 360, 100, 100)
for idx in range(20):
texto = "py5coding.org"
s = 50 if idx % 2 else 100
fundo = py5.color(H, s, B)
image = cria_face(200, 200 // 3, fundo, py5.color(H, 0, 100), texto)
LADOS.append((image, fundo))
def draw():
py5.background(0)
py5.lights() # Enable lighting
with py5.push_matrix():
py5.translate(py5.width / 2, py5.height / 2, 400)
py5.rotate_x(-py5.PI / 6)
py5.rotate_z(py5.radians(90))
py5.rotate_y(py5.frame_count * 0.02)
desenha_cilindro(raio=100, altura=200, lados=len(LADOS))
helpers.write_legend(sketch=sketch)
def key_pressed():
key = py5.key
if key == " ":
save_and_close()
def save_and_close():
py5.no_loop()
helpers.save_sketch_image(sketch)
py5.exit_sketch()
if __name__ == "__main__":
py5.run_sketch()