1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LuaAdvent Calendar 2022

Day 13

色相的なキューブを作る

Posted at

 
この記事はアドカレに参加しています。

色相的なキューブを作る

以下のようなやつを作ります。
image.png

色相とは…………??

色相とは、色合いを数値化したものです。
具体的な計算方法はこの記事が分かり易いです。

考え方

二次元空間を空想したときに、三つのベクトルを考えます。

\vec{r}=
\begin{pmatrix}
0 \\
1 
\end{pmatrix}\\

\vec{g}=
\begin{pmatrix}
 \frac{\sqrt{3}}{2} \\
-\frac{1}{2} 
\end{pmatrix}\\

\vec{b}=
\begin{pmatrix}
-\frac{\sqrt{3}}{2} \\
-\frac{1}{2} 
\end{pmatrix}

 
図にするととても分かり易いです。三つのベクトルが120度ずつ離れており、それぞれが単位ベクトルであることが分かると思います。
 
さて、これらのベクトルに対して色の輝度値であるRGBの値を掛け算して、足していきます。最終的なベクトルを(x,y)とします。

\begin{pmatrix}
x \\
y
\end{pmatrix}=

R \; \vec{r} \; + G  \; \vec{g} \; + B \; \vec{b}
\begin{pmatrix}
x \\
y
\end{pmatrix}=

R 

\begin{pmatrix}
0 \\
1 
\end{pmatrix} \; 

+G  

\begin{pmatrix}
 \frac{\sqrt{3}}{2} \\
-\frac{1}{2} 
\end{pmatrix} \; 

+B 

\begin{pmatrix}
-\frac{\sqrt{3}}{2} \\
-\frac{1}{2} 
\end{pmatrix}

 
ここで、

θ=arctan(\;y\;/\;x\;)

とすることで色相を求めることができます。(今回はここまでやりませんが)

コード

色相の考えを使って描画するコードを以下に示します。

<?
local m=math.floor

local ha=10--ここの値の三乗の数だけ描画(20ぐらいがおすすめ)
local sa=255/ha
sa=m(sa*100)*0.01

local ru=math.sqrt(3)*0.5
ru=m(ru*100)*0.01
obj.load("figure","六角形",0xffffff,10)
obj.effect("カメラ制御オプション","カメラの方を向く",1)

for r=0,ha do
 for g=0,ha do
  for b=0,ha do
   local R,G,B=m(r*sa),m(g*sa),m(b*sa)
   local x,y,z
   x=(G-B)*ru
   y=R-0.5*(G+B)
   z=(R+G+B)*2/3--ここはRGBの平均
   obj.effect("単色化","color",RGB(R,G,B),"輝度を保持する",0)
   obj.draw(x,y,z)
  end
 end
end
?>

おわりに

今回はHSVとかRGBとか呼ばれる色空間でしたが、色空間には他にもおもしろいものがあるので楽しいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?