波長に対する光のスペクトルをExcelのマクロで描く

タイトルの通りです。
波長に対する光のスペクトラムの絵をきれいに描きたいです。
どうすればよいでしょうか?

スポンサーリンク

現時点での僕の解

こんな感じでいかがでしょうか?

では早速この描き方を示します。

  1. R、G、Bの波長を調べます。CIE(国際照明委員会)によって、それぞれ700nm、546.1nm、435.8nmと決められています
  2. HSV色空間において、R、G、Bの色相(Hue)を調べます。それぞれ0°、120°、240°です
  3. 波長をX軸、色相をY軸として、この3点をExcelでプロットします。すなわち、(700, 0), (546.1, 120), (435.8, 240)の点です
  4. このプロットを二次曲線で近似します。すると、 y = 0.001166597 x^{2} - 2.233423398 x + 991.763934787 が得られます
  5. 436 [nm]~700 [nm]を定義域として、1 [nm]ごとに色相の値を得ます
  6. 5.で求めた色相について、彩度(Saturation)と明度(Value)をそれぞれ100 [%]としてR、G、Bの値を得ます
  7. For文の中に下行に相当するコードを入れ、得られたR、G、B値を順次与えます。すると、(A列に)スペクトラムが現れます
    Range(“A” & i).Interior.color = RGB(R, G, B)

必要であれば、次のマクロをお使いください。ただし定義域は、0≦H<360 [°]、0≦S≦100 [%]、0≦V≦100 [%]としています

Sub HSV2RGB(ByVal H As Double, ByVal S As Double, ByVal V As Double, _
        ByRef R As Integer, ByRef G As Integer, ByRef B As Integer)
    Dim Max As Double
    Dim Min As Double
    Max = Round(V * 2.55)
    Min = Round(Max - ((S / 100) * Max))
    If Max < 0 Then Max = 0 If Max > 255 Then Max = 255
    If Min < 0 Then Min = 0 If Min > 255 Then Min = 255
    H = (H / 360 - Int(H / 360)) * 360
    Select Case True
        Case H >= 0 And H < 60
            R = Max
            G = Round((H / 60) * (Max - Min) + Min)
            B = Min
        Case H >= 60 And H < 120
            R = Round(((120 - H) / 60) * (Max - Min) + Min)
            G = Max
            B = Min
        Case H >= 120 And H < 180
            R = Min
            G = Max
            B = Round(((H - 120) / 60) * (Max - Min) + Min)
        Case H >= 180 And H < 240
            R = Min
            G = Round(((240 - H) / 60) * (Max - Min) + Min)
            B = Max
        Case H >= 240 And H < 300
            R = Round(((H - 240) / 60) * (Max - Min) + Min)
            G = Min
            B = Max
        Case H >= 300 And H < 360
            R = Max
            G = Min
            B = Round(((360 - H) / 60) * (Max - Min) + Min)
        Case Else
            R = 0
            G = 0
            B = 0
    End Select
    
End Sub

まとめ

光源の分光分布、XYZ色空間、ガンマ等、色のことをいろいろと調べてみましたが、よく分かりませんでしたし、くすんだようなスペクトルしか得られませんでした。

ご覧になりますか?

くすんだスペクトル1

くすんだスペクトル1

こんなのとか、

くすんだスペクトル2

くすんだスペクトル2

こんなのです。だいぶ残念な色合いです。

今回の方法で描くスペクトルは、シンプルであるとともに、彩度と明度が常に100%ですので、きれいです。

コメント

タイトルとURLをコピーしました