カラーの循環調和曲線
黄金比を適用した、カラーの循環調和曲線の例を掲載します。また、その例図を作成するための、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\)
今回、作成したスクリプトでは、花びら一枚ごとに、個別の色とアルファ値 (αチャンネル、透明度) を、指定することができます。
この例では、全ての花びらの色に、‘orange’ を指定しました。 そして、大きな花びらのアルファ値に、0.3 を、小さな花びらのアルファ値に、0.45 を指定しました。
この例では、小さな花びらが、大きな花びらに、全て重なっています。 そのため、小さな花びらの色は、指定したアルファ値 (透明度) より、色が濃く見えます。
例2 : \(n=5\) , \(d=3\)
- 全ての花びらの色 : ‘springgreen’
- 大きな花びらのアルファ値 : 0.25
- 小さな花びらのアルファ値 : 0.5
例3 : \(n=17\) , \(d=3\)
- 全ての花びらの色 : ‘magenta’
- 大きな花びらのアルファ値 : 0.3
- 小さな花びらのアルファ値 : 0.35
例4 : \(n=17\) , \(d=6\)
- 全ての花びらの色 : ‘deepskyblue’
- 大きな花びらのアルファ値 : 0.2
- 小さな花びらのアルファ値 : 0.35
例5 : \(n=17\) , \(d=13\)
- 全ての花びらの色 : ‘blue’
- 大きな花びらのアルファ値 : 0.1
- 小さな花びらのアルファ値 : 0.12
例6 : \(n=28\) , \(d=5\)
この例では、花びらの色に、‘red’ と ‘magenta’ を交互に繰り返して、指定しました。 大小の花びらとも同じように、指定しました。 そして、大きな花びらのアルファ値に、0.3 を、小さな花びらのアルファ値に、0.35 を指定しました。
例7 : \(n=34\) , \(d=5\)
- 大小の花びらの色 : ‘gold’ と ‘lime’ の交互
- 大きな花びらのアルファ値 : 0.35
- 小さな花びらのアルファ値 : 0.6
例8 : \(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 スクリプトでは、曲線全体を一度に描いています。 一方、このスクリプトでは、花びら一枚ごとに、個別の色とアルファ値を指定するために、曲線全体を一度に描かず、花びらを一枚ずつ描くことを繰り返しています。
コメント
コメントを投稿