villares / material-aulas

Material para ensino introdutório de programação com Python em um contexto visual
https://abav.lugaralgum.com/material-aulas/
97 stars 70 forks source link

Usando cores em notação hexa (#FFFFFF) do Processing modo Java no modo Python #81

Closed MarcioBonadiaa closed 3 years ago

MarcioBonadiaa commented 3 years ago

Código desenvolvido e modificado em Java

// via https://www.openprocessing.org/sketch/150834

int columns=8;
int rows = columns;
float gap, theta, theta2;
color[] palette = {
  #7FFFD4, #66CDAA, #E9967A, #FA8072
};
color bg = #808080;

void setup() {
  size(500, 500);
  strokeWeight(0);
  gap=width/columns;
}

void draw() {
  background(bg);
  float theta2=PI/2;
  for (int i=0; i<columns; i++) {
    stroke(palette[i%palette.length], 220);
    fill(palette[i%palette.length], 170);
    theta2 += (TWO_PI/12);
    float offSetX = map(sin(theta2), -1, 1, 0, TWO_PI);
    for (int j=0; j<rows; j++) {
      float x = (.5+i)*gap;
      float y = (.5+j)*gap;
      float offSetY = (TWO_PI/rows*j);
      float sz = map(sin(theta+offSetX+offSetY), -1, 1, 5, gap*1.5);
      ellipse(x, y, sz, sz);
    }
  }
  theta -= 0;
}

Transcrito para Python com o auxílio do Professor Alexandre Villares

# via https://www.openprocessing.org/sketch/150834

rows = columns = 20
theta = 0

def cor_hexa(s):
    # conversor de hexa em cor
    return color(int(s[:2], 16), int(s[2:4], 16), int(s[4:6], 16))

def setup():
    global gap, palette, bg
    size(500, 500)
    strokeWeight(0)
    gap = width / columns
    # RRGGBB no Java é o número hexadecimal 0xRRGGBB no Python
    bg = cor_hexa('808080')
    palette = [cor_hexa('7FFFD4'),
               cor_hexa('66CDAA'),
               cor_hexa('E9967A'),
               cor_hexa('FA8072')]

def draw():
    global theta
    background(bg)
    theta2 = PI / 20
    for i in range(columns):
        stroke(palette[i % len(palette)], 220)
        fill(palette[i % len(palette)], 170)
        theta2 += TWO_PI / 120
        offSetX = map(sin(theta2), -1, 1, 0, TWO_PI)
        for j in range(rows):
            x = (.1 + i * 1.5) * gap
            y = (.15 + j) * gap
            offSetY = (TWO_PI / rows * j/2)
            sz = map(sin(theta + offSetX + offSetY), -1, 1, 5, gap * 1.2)
            ellipse(x, y, sz, sz)
villares commented 3 years ago

Salve @MarcioBonadiaa, obrigado !

Isso acredito que vai dar um acréscimo muito interessante na documentação

Dá para usar a notação com # (cor hexa) entre aspas, como em fill("#FFAA00") nas funções fill(), background() e stroke() quando estamos no Processing modo Python. Mas infelizmente isso não funciona com a função color() e aí tive esse trabalho de criar uma função extra para facilitar a tradução desse exemplo.

Vou pensar em como acrescentar isso no material sobre cores!

def setup():
    verde = color_hex('#00FF00')
    fill(verde)
    rect(0, 0, 50, 100)
    azul = color_hex('0000FF')
    fill(azul)
    rect(50, 0, 50, 100)

def color_hex(s):
    """
    No Processing tradicional (Java) podemos indicar cores com a notação hexadecimal  #AABBCC
    No modo Python é possivel usar essa notação entre aspas em fill(), stroke() e
    background(), mas não é possível fazer isso com a função color().
    Esta função permite usar cores a partir de um string com a notação hexa no modo Python
    """
    if s.startswith('#'):
        s = s[1:]
    return color(int(s[:2], 16), int(s[2:4], 16), int(s[4:6], 16))
villares commented 3 years ago

Acrescentei aqui: https://github.com/villares/material-aulas/blob/master/Processing-Python/mais_sobre_cores.md