【问题标题】:Adjust values non linear调整值非线性
【发布时间】:2015-10-08 06:14:13
【问题描述】:

我有一个值对列表,描述了到给定像素的距离和我想要设置的百分比亮度:

Distance    Brightness
0px         100%
1px         99%
2px         98%
3px         97%
etc.

我想转换我的值,使亮度值形成某种曲线。更接近的值(最多 10 像素)可能在 100-95 之间,其余的会下降得更快。

第一行是我已经拥有的线性行,第二行是我的目标。

另一个例子,我想要实现的目标: 我现在拥有的:

我想拥有什么:

我正在编写一个增亮画笔。如您所见,亮度是线性的。我希望它在圆圈中间变得更亮,并在圆圈边缘更大的“脱落”。

计算像素距离和亮度值的代码示例

    private static Color LightenPixel(Vector2f center, Vector2f pixel, Color color)
    {
        //Calculate distance to circle origin
        double x = Math.Pow((double)(center.X - pixel.X),2);
        double y = Math.Pow((double)(center.Y - pixel.Y), 2);
        double distance = Math.Sqrt(x + y);

        //Get the percentual distance to the origin and flip the percentual value
        // E.G. 80% becomes 20% for brightness => closer to origin => brighter
        // -1 = 100% Darkness
        // +1 = 100% Brightness
        float brightness = (float)(1 - (distance * 100 / radius) / 100);
        return ChangeColorBrightness(color, brightness);
    }

编辑: 另一个关于我想要它的例子:

红色是我所拥有的,绿色是我想要的(不知何故)。

【问题讨论】:

  • 你能告诉我们你已经做了什么吗? (你有一些代码吗?)
  • 我添加了一个代码示例,说明如何计算给定像素到圆原点的距离和亮度值。

标签: c# math pixel sfml brightness


【解决方案1】:

我认为您只需要使用Log function。 对数函数比输入下降得更快。

Math.Log10(10D); // 1
Math.Log10(9D);  // 0.95
Math.Log10(8D);  // 0.90
Math.Log10(7D);  // 0.84
Math.Log10(6D);  // 0.77
Math.Log10(5D);  // 0.69
Math.Log10(4D);  // 0.60
Math.Log10(3D);  // 0.47
...

所以基本上,当你靠近中心时,你的值会越来越小。 如果您需要的是相反的(更接近中心=更大的值),那么只需使用1/Math.Log(distance)

所以在你的例子中,类似于:

brightness = (float)Math.Log10(brightness + 1);

应该成功...

【讨论】:

  • 哇,看起来好简单。我一直在寻找可能的方法来实现这一点,而后勤功能似乎很完美。你能告诉我如何用 Log 函数改变“脱落”吗?
  • 我可能会提供帮助如果你能提供一个我可以玩源代码的 zip... 否则它有点棘手:)
  • Cool :) 在这里你可以下载 VS 2013 解决方案 + 项目 nakkvarr.net/sfmlBrush.7z ... 我正在使用 SFML NuGet 包进行图形
  • 方法“LightenPixel”和“ChangeColorBrightness”应该是有趣的方法
  • 感谢您抽出宝贵时间,但这并不是我所需要的 :( 我玩过它,但找不到最佳值。现在我创建了一个小测试应用程序来可视化“曲线” ...如果您想查看:nakkvarr.net/Falloff.7z ...我还添加了另一个屏幕截图,说明我希望曲线看起来如何(或相似)
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 2014-01-02
  • 1970-01-01
相关资源
最近更新 更多