我正在开展一个小项目,我希望能够“绘制”RGB Spectrum。我想创建一个完整“光谱”的视觉表示。我通过对每种颜色(R,G和B)使用3个正弦函数来做到这一点,但是,我的程序创建的图形并不代表全谱(我不是在寻找完整的1680万种颜色,但是我的图形是缺乏橙色/黄色和其他一些色调)。以下是我到目前为止的情况。
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
答案 0 :(得分:1)
像If r <= 0 Then r = 0
这样的行使一半的值映射到零
变体,将r
,g
,b
值视为正弦波,平均值为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
下图显示了您的代码(前一个)和修改后的代码生成的频谱。修改后的代码确实涵盖了更多的频谱: