Amöben in der Petrischale (1)

Python
Processing
Trinket
Autor:in

Jörg Kantel

Veröffentlichungsdatum

20. Februar 2023

Ich habe meine hier begonnenen Experimente mit Trinket und dem dort unterstützten Python/Processing-Mode fortgesetzt. Dazu habe ich angefangenen, die Amöben-Kultur aus Tristan Bunns Buch »Learn Python Visually« (Seite 207 ff) als Trinket zu implementieren. Die Portierung ist noch nicht vollständig und besteht bisher aus diesem Code:

from processing import *
from random import randint, uniform

WIDTH, HEIGHT = 600, 600
MIN_DIA = 50
MIN_DIA2 = MIN_DIA//2
MAX_DIA = 150
MAX_DIA2  = MAX_DIA//2

class Amoeba():
  
  def __init__(self, _x, _y, _diameter):
    self.x = _x
    self.y = _y
    self.d = _diameter
    self.nucleus = {
      "fill": ["#FF0000", "#FF9900", "#FF00FF",
               "#00FF00", "#0099FF"][int(randint(0, 4))],
      "x": self.d*uniform(-0.15, 0.15),
      "y": self.d*uniform(-0.15, 0.15),
      "d": self.d/uniform(2.5, 4)
    }
    
  def display(self):
    # Cell Nucleus
    fill(self.nucleus["fill"])
    noStroke()
    ellipse(self.x + self.nucleus["x"], self.y + self.nucleus["y"],
            self.nucleus["d"], self.nucleus["d"])
    # Cell Membrane
    fill(0x880099AA)
    stroke("#FFFFFF")
    strokeWeight(3)
    ellipse(self.x, self.y, self.d, self.d)

amoebas = []

def setup():
  size(WIDTH, HEIGHT)
  for _ in range(15):
    amoeba = Amoeba(randint(MAX_DIA2, width - MAX_DIA2),
                    randint(MAX_DIA2, height - MAX_DIA2),
                    randint(MIN_DIA, MAX_DIA))
    amoebas.append(amoeba)
  
def draw():
  background("#004477")
  for amoeba in amoebas:
    amoeba.display()

print("I did it, Babe!")    
run()

Das Trinket könnt Ihr hier finden. Ich werde mich noch an einer vollständige Portierung dieses Beispielprogramms versuchen. Tristan Bunn setzt dabei unter anderem auf Processings PVector()-Klasse. Die P5.js-Implementierung dieser Klasse folgt einer anderen Syntax, daher bin ich auf das Ergebnis gespannt. Still digging!