Processingのおさらい(第4問)

ステップ1

「おでん」じゃなくて「ポケモンボール」を描いてみた。円と四角を組み合わせれば簡単にできるんじゃないか?と思って作り始めたけど、円だと上手く行かない…半円を描く命令が必要だ!調べてみたらarcで円弧が描けることが分かり、無事解決。

def setup():
    size(600, 300)
    background(147, 178, 147)

def draw():
    drawPokemonBall(width / 2, height / 2, 100)    
        
def drawPokemonBall(x, y, r):
    sukima = r / 50
    tsize = r / 5
    stroke(0)
    strokeWeight(1)
    
    # 上半円
    fill(255, 0, 0)
    arc(x, y - sukima, r, r, radians(180), radians(360))
    
    #下半円
    fill(255)
    arc(x, y + sukima, r, r, radians(0), radians(180))
    
    #中央
    fill(0)
    rect(x - (r / 2), y - sukima, r, sukima * 2)
    ellipse(x, y, r / 2.5, r / 2.5)

    #中央丸
    fill(255)
    ellipse(x, y, r / 3, r / 3)
    ellipse(x, y, r / 5, r / 5)
    
    #ツヤ
    fill(255)
    noStroke()
    ellipse(x - (r / 4), y - (r / 4), r / 10, r / 10)
    
    #文字
    fill(0)
    textAlign(CENTER)
    textSize(tsize)
    text("Gotcha!", x, y + ((r / 2) + (tsize * 1.2)))

ステップ2

triangleで作れるものを探してみました。エヴァンゲリオンの第5使徒ラミエルです。

def setup():
    size(600, 300)
    background(200, 230, 240)

def draw():
    drawRamiel(150 - 40, 150 - 40, 40)
    drawRamiel(300 - 40, 150 - 40, 40)
    drawRamiel(450 - 40, 150 - 40, 40)
    
def drawRamiel(x, y, r):   #中心は左上     
    sukima = r / 10
    tsize = r / 4

    # 左上    
    fill(130, 170, 250)
    triangle(x+r, y+0, x+r, y+r, x+0, y+r)

    # 右上    
    fill(80, 140, 240)
    triangle(x+r, y+0, x+r, y+r, x+r*2, y+r)

    # 左下
    fill(60, 120, 220)
    triangle(x+r, y+r+sukima, x+r, y+r*2+sukima, x+0, y+r+sukima)
    
    # 右下
    fill(30, 90, 180)
    triangle(x+r, y+r+sukima, x+r, y+r*2+sukima, x+r*2, y+r+sukima)
    
    # コア
    fill(255, 0, 0)
    ellipse(x+r, y+r+sukima/2, sukima, sukima)
    
    #文字
    fill(40, 30, 120)
    textAlign(CENTER)
    textSize(tsize)
    text("RAMIEL", x+r, y + ((r * 2) + (tsize * 1.6)))

# fill(130, 170, 250)
# triangle(100, 0, 100, 100, 0, 100)

# fill(80, 140, 240)
# triangle(100, 0, 100, 100, 200, 100)

# fill(60, 120, 220)
# triangle(100, 100, 100, 200, 0, 100)

# fill(30, 90, 180)
# triangle(100, 100, 100, 200, 200, 100)

コメントする