カラーの循環調和曲線

黄金比を適用した、カラーの循環調和曲線の例を掲載します。また、その例図を作成するための、SageMath スクリプトも公開します。

(There is the English(英語) page.)

(最終更新日: 2021年2月21日)

前書き

循環調和曲線 のページで紹介した曲線に、色を塗ってみました。 作成例を、以下 に掲載します。

また、その例図を作成するための、SageMath スクリプトを、このページの 後半 に掲載しています。

カラーの循環調和曲線

作図に使用した、循環調和曲線の式を、以下に示します。

\[r = \cos \left( \frac{n}{d} \, \theta \right) + \sqrt{5} -2\]

この式の \(n\)\(d\) に、いろいろな正の整数 ( \(n \geq d\) ) を代入すれば、黄金比で構成された、循環調和曲線の図を描くことができます。 この式の詳細は、循環調和曲線 のページを、ご覧ください。

色を塗った循環調和曲線の例を、以下に示します。

例1 :   \(n=3\) ,   \(d=1\)

カラーの循環調和曲線 (n=3, d=1)

今回、作成したスクリプトでは、花びら一枚ごとに、個別の色とアルファ値 (αチャンネル、透明度) を、指定することができます。

この例では、全ての花びらの色に、‘orange’ を指定しました。 そして、大きな花びらのアルファ値に、0.3 を、小さな花びらのアルファ値に、0.45 を指定しました。

この例では、小さな花びらが、大きな花びらに、全て重なっています。 そのため、小さな花びらの色は、指定したアルファ値 (透明度) より、色が濃く見えます。

例2 :   \(n=5\) ,   \(d=3\)

カラーの循環調和曲線 (n=5, d=3)
  • 全ての花びらの色 : ‘springgreen’
  • 大きな花びらのアルファ値 : 0.25
  • 小さな花びらのアルファ値 : 0.5

例3 :   \(n=17\) ,   \(d=3\)

カラーの循環調和曲線 (n=17, d=3)
  • 全ての花びらの色 : ‘magenta’
  • 大きな花びらのアルファ値 : 0.3
  • 小さな花びらのアルファ値 : 0.35

例4 :   \(n=17\) ,   \(d=6\)

カラーの循環調和曲線 (n=17, d=6)
  • 全ての花びらの色 : ‘deepskyblue’
  • 大きな花びらのアルファ値 : 0.2
  • 小さな花びらのアルファ値 : 0.35

例5 :   \(n=17\) ,   \(d=13\)

カラーの循環調和曲線 (n=17, d=13)
  • 全ての花びらの色 : ‘blue’
  • 大きな花びらのアルファ値 : 0.1
  • 小さな花びらのアルファ値 : 0.12

例6 :   \(n=28\) ,   \(d=5\)

カラーの循環調和曲線 (n=28, d=5)

この例では、花びらの色に、‘red’ と ‘magenta’ を交互に繰り返して、指定しました。 大小の花びらとも同じように、指定しました。 そして、大きな花びらのアルファ値に、0.3 を、小さな花びらのアルファ値に、0.35 を指定しました。

例7 :   \(n=34\) ,   \(d=5\)

カラーの循環調和曲線 (n=34, d=5)
  • 大小の花びらの色 : ‘gold’ と ‘lime’ の交互
  • 大きな花びらのアルファ値 : 0.35
  • 小さな花びらのアルファ値 : 0.6

例8 :   \(n=49\) ,   \(d=6\)

カラーの循環調和曲線 (n=49, d=6)

この例では、虹の7色を使用しました。 SageMath の中に、虹色のリストを作成する、‘rainbow’ 関数があります。 この関数の引数には、出力する色の数を指定します。 この関数の実行例を、以下に示します。

sage: rainbow(7)
['#ff0000', '#ffda00', '#48ff00', '#00ff91', '#0091ff', '#4800ff', '#ff00da']

大きな花びらの色に、この実行例で出力された7色を、この順序で繰り返し指定しました。 小さな花びらの色にも、基本的には、この7色を指定しましたが、色同士の見た目の強度のバランスを調整するため、一部の色は修正しました。 また、同様の理由で、大小の花びらのアルファ値にも、調整した値を、個別に指定しました。

この例で指定した、色とアルファ値 (α) の一覧を、以下の表に示します。

大きな花びらの色 ff0000 ffda00 48ff00 00ff91 0091ff 4800ff ff00da
大きな花びらの α 0.15 0.35 0.35 0.35 0.15 0.15 0.15
小さな花びらの色 ff0000 f5d100 41e600 00e884 0091ff 4800ff ff00da
小さな花びらの α 0.3 0.75 0.75 0.75 0.3 0.3 0.3

カラーの循環調和曲線の図を作成するスクリプト

前述した全ての図を作成するための、SageMath スクリプトを、以下に示します。

# This file is tested with SageMath 9.1.

# Create a symbolic variable 'θ'
var('θ')

def make_chc(numer, denom, get_petal_color):
    '''Make the Cyclic-Harmonic Curve filled with color
    :param numer: numerator
    :param denom: denominator
    '''

    # The number of petals
    # (The number of large and small petals is the same.)
    petal_num = numer / gcd(numer, denom)

    # The interval of petals
    petal_inter = (2*denom*pi) / petal_num

    # The first answer of Cyclic-Harmonic Curve equation (self = 0)
    first_ans = arccos(-sqrt(5)+2) / (numer/denom)

    # Make graphics objects
    g = Graphics()
    for k in srange(petal_num):

        # The starting and ending values of the kth large petal
        large_start = (k * petal_inter) - first_ans
        large_end   = (k * petal_inter) + first_ans

        # The starting and ending values of the kth small petal
        small_start = large_end
        small_end   = ((k + 1) * petal_inter) - first_ans

        # The color and alpha (transparency) of large and small petals
        large_color, large_alpha, small_color, small_alpha = get_petal_color(k)

        def get_petal_plot(petal_start, petal_end, petal_color, petal_alpha):
            '''Get the plotting object of the petal
            '''
            return polar_plot( cos((numer/denom)*θ)+sqrt(5)-2, \
                (θ, petal_start, petal_end), axes=False, thickness=0, \
                fill=True, fillcolor=petal_color, fillalpha=petal_alpha)

        # Plotting the kth large and small petals
        g+= get_petal_plot(large_start, large_end, large_color, large_alpha)
        g+= get_petal_plot(small_start, small_end, small_color, small_alpha)

    # Save the figure file
    g.save('chc-' + str(numer) + '-' + str(denom) + '.svg')

# Make some Cyclic-Harmonic Curves filled with color
make_chc( 3,  1, lambda k: ('orange'     , 0.3 , 'orange'     , 0.45))
make_chc( 5,  3, lambda k: ('springgreen', 0.25, 'springgreen', 0.5 ))
make_chc(17,  3, lambda k: ('magenta'    , 0.3 , 'magenta'    , 0.35))
make_chc(17,  6, lambda k: ('deepskyblue', 0.2 , 'deepskyblue', 0.35))
make_chc(17, 13, lambda k: ('blue'       , 0.1 , 'blue'       , 0.12))
make_chc(28,  5, lambda k: (['red' , 'magenta'][k % 2], 0.3 , \
                            ['red' , 'magenta'][k % 2], 0.35))
make_chc(34,  5, lambda k: (['gold', 'lime'   ][k % 2], 0.35, \
                            ['gold', 'lime'   ][k % 2], 0.6 ))

# Make the Cyclic-Harmonic Curve filled with rainbow colors
# (The first array is made from the function `rainbow(7)`.)
make_chc(49, 6, lambda k: ( \
    ['#ff0000', '#ffda00', '#48ff00', '#00ff91', '#0091ff', '#4800ff', \
        '#ff00da'][k % 7], \
    [0.15, 0.35, 0.35, 0.35, 0.15, 0.15, 0.15][k % 7], \
    ['#ff0000', '#f5d100', '#41e600', '#00e884', '#0091ff', '#4800ff', \
        '#ff00da'][k % 7], \
    [0.3 , 0.75, 0.75, 0.75, 0.3 , 0.3 , 0.3 ][k % 7]))

このスクリプトで使用している 数式 は、循環調和曲線 のページで説明している数式と同じものです。

循環調和曲線のページに掲載している SageMath スクリプトでは、曲線全体を一度に描いています。 一方、このスクリプトでは、花びら一枚ごとに、個別の色とアルファ値を指定するために、曲線全体を一度に描かず、花びらを一枚ずつ描くことを繰り返しています。

コメント

このブログの人気の投稿