2017-07-03 167 views
1

我正在一个小项目中工作,我希望能够“绘制”RGB光谱。我想创建一个完整的“光谱”的视觉表示。我已经通过对每种颜色(R,G和B)使用3个正弦函数来完成此操作,但是,我的程序创建的图形并不代表全部光谱(我不是在寻找完整的1680万种颜色,但是我的图形是缺少橙色/黄色和其他一些色调)。以下是我到目前为止。在VBA中绘制RGB光谱

Dim mul As Double, N As Double, i As Double 
mul = 12 
N = 3.14 * mul 
For i = 1 To 10 Step 3.14/100 
    Dim r As Double, b As Double, g As Double 
    r = Sin(i) 
    g = Sin(-1 * i) 
    b = Cos(i) 
    If r <= 0 Then r = 0 
    If g <= 0 Then g = 0 
    If b <= 0 Then b = 0 
    Debug.Print Sin(i) * 250 & 1 
    Cells(10, i * 10).Interior.Color = RGB(r * 255, g * 255, b * 255) 
    Cells(11, i * 10).Interior.Color = RGB(r * 255, 0, 0) 
    Cells(12, i * 10).Interior.Color = RGB(0, g * 255, 0) 
    Cells(13, i * 10).Interior.Color = RGB(0, 0, b * 255) 


Next i 

回答

1

线等If r <= 0 Then r = 0使充分一半的值映射到零

变型中,rgb值的思想为正弦波的127.5一个平均值和127.5振幅(所以他们去从0到255)是:

Sub test() 
    Dim mul As Double, N As Double, i As Double 
    Dim r As Long, b As Long, g As Long 

    For i = 1 To 10 Step Application.Pi/100 
     r = Round(127.5 + 127.5 * Sin(i)) 
     g = Round(127.5 + 127.5 * Sin(-1 * i)) 
     b = Round(127.5 + 127.5 * Cos(i)) 
     Cells(10, i * 10).Interior.Color = RGB(r, g, b) 
     Cells(11, i * 10).Interior.Color = RGB(r, 0, 0) 
     Cells(12, i * 10).Interior.Color = RGB(0, g, 0) 
     Cells(13, i * 10).Interior.Color = RGB(0, 0, b) 
    Next i 
End Sub 

下图显示了由代码(最上面的一个)和修改的码产生的光谱。修改后的代码似乎覆盖了更多的光谱:

enter image description here