在Java中,根据计算的整数将可见光谱映射到RGB(较高的整数应该更接近紫外线,较低的整数应该更接近红外线)
In Java, map visible spectrum to RGB based on calculated integer (higher ints should be closer to ultraviolet, lower ints closer to infrared)
用于 Mandelbrot 集渲染(参见:https://en.wikipedia.org/wiki/Mandelbrot_set);每个点的颜色应该基于复数 Z 逃离集合所花费的迭代次数。
我想映射颜色,如果该点是 Mandelbrot 集的一个元素,它应该是纯红色 [RGB(255, 0, 0),从 IR 到 UV 的整个光谱为 0%]。
如果由于循环达到迭代上限而停止计算,则颜色应为纯紫色 [RGB(249, 192, 255),100% 跨光谱]。
我想解决方案涉及如下内容:
//where iterCount is the value for that point, maxIters is the iteration cap
double spectrumValue=iterCount/maxIters; //percent in decimal form
setColor(RGBConversion(spectrumValue));
但是,我不知道如何做的部分是 RGBConversion 方法。理想情况下,它应该 运行 在常数时间内。
您可以从一系列代表光谱中关键点的颜色开始:红色、橙色、黄色、绿色、蓝色、紫色。假设它们在 0、0.2、0.4、0.6、0.8 和 1 处等间距。然后使用 this answer 在它们之间平滑过渡。
对于每个间隔,您需要将增量范围(0.0 到 0.2)映射到 0 到 1 的比率。
您应该考虑使用 "HSL" 或 "HSB"(又名 "HSV")颜色 space,其中 "H" 都代表 "hue"。色调通常以度为单位测量角度,0 度代表红色,120 度代表绿色,240 度代表蓝色,尽管一些库使用范围 0..1
保持 "S" 和 "B" 不变并从范围底部到顶部线性变化 "H" 将产生典型的 "rainbow" 颜色。
在您的情况下,因为您使用的是 Java 和 AWT,您应该能够简单地调用:
setColor(Color.getHSBColor(spectrumValue, 1.0, 1.0));
用于 Mandelbrot 集渲染(参见:https://en.wikipedia.org/wiki/Mandelbrot_set);每个点的颜色应该基于复数 Z 逃离集合所花费的迭代次数。
我想映射颜色,如果该点是 Mandelbrot 集的一个元素,它应该是纯红色 [RGB(255, 0, 0),从 IR 到 UV 的整个光谱为 0%]。
如果由于循环达到迭代上限而停止计算,则颜色应为纯紫色 [RGB(249, 192, 255),100% 跨光谱]。
我想解决方案涉及如下内容:
//where iterCount is the value for that point, maxIters is the iteration cap
double spectrumValue=iterCount/maxIters; //percent in decimal form
setColor(RGBConversion(spectrumValue));
但是,我不知道如何做的部分是 RGBConversion 方法。理想情况下,它应该 运行 在常数时间内。
您可以从一系列代表光谱中关键点的颜色开始:红色、橙色、黄色、绿色、蓝色、紫色。假设它们在 0、0.2、0.4、0.6、0.8 和 1 处等间距。然后使用 this answer 在它们之间平滑过渡。
对于每个间隔,您需要将增量范围(0.0 到 0.2)映射到 0 到 1 的比率。
您应该考虑使用 "HSL" 或 "HSB"(又名 "HSV")颜色 space,其中 "H" 都代表 "hue"。色调通常以度为单位测量角度,0 度代表红色,120 度代表绿色,240 度代表蓝色,尽管一些库使用范围 0..1
保持 "S" 和 "B" 不变并从范围底部到顶部线性变化 "H" 将产生典型的 "rainbow" 颜色。
在您的情况下,因为您使用的是 Java 和 AWT,您应该能够简单地调用:
setColor(Color.getHSBColor(spectrumValue, 1.0, 1.0));