6.3 コッホ曲線をPythonで解いてみた

6.3 コッホ曲線をPythonで解いてみた

はじめに

「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」の各問題をPythonを用いて解いていくシリーズです。

このシリーズについて

問題

AIZU ONLINE JUDGEを参照

解法

from math import cos, sin, radians


def koch(n, a, b):
    if n == 0:
        return
    s = [0, 0]
    t = [0, 0]
    u = [0, 0]

    s[0] = (2 * a[0] + 1 * b[0]) / 3
    s[1] = (2 * a[1] + 1 * b[1]) / 3
    t[0] = (1 * a[0] + 2 * b[0]) / 3
    t[1] = (1 * a[1] + 2 * b[1]) / 3
    u[0] = (t[0] - s[0]) * cos(radians(60)) - (t[1] - s[1]) * sin(radians(60)) + s[0]
    u[1] = (t[0] - s[0]) * sin(radians(60)) - (t[1] - s[1]) * cos(radians(60)) + s[1]

    koch(n - 1, a, s)
    print(s[0], s[1])
    koch(n - 1, s, u)
    print(u[0], s[1])
    koch(n - 1, u, t)
    print(t[0], t[1])
    koch(n - 1, t, b)


a = [0, 0]
b = [100, 0]
n = 1

print(a[0], a[1])
koch(n, a, b)
print(b[0], b[1])

解説はTBD.

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造カテゴリの最新記事