【问题标题】:Interpolation or other math formula插值或其他数学公式
【发布时间】:2014-03-29 18:17:32
【问题描述】:

我有一道数学题。

我正在处理一个定义渐变大小的图形函数。 然而,这个大小不是以像素为单位,而是一个从 0 到 1 的值。

我想找到一个公式来自动确定任何尺寸的所需值。

但我只是用我的眼睛发现

  • 如果大小为 1000 像素,则该值应为 ~0.96。
  • 如果大小为 498 像素,则该值应为 ~0.93。
  • 如果大小为 306 像素,则该值应为 ~0.9。
  • 如果大小为 239 像素,则该值应为 ~0.86。
  • 如果大小为 175 像素,则该值应为 ~0.79。
  • 如果大小为 50 像素,则该值应为 ~0.25。

有人知道计算给定像素大小的值大小的公式吗? 或者有很好的数学理解的人会立即看到基本公式吗? 我认为这些价值观并不完全正确。我不得不用我的眼睛来确定需要哪个值来产生我需要的渐变:

【问题讨论】:

标签: c# .net vb.net math graphics


【解决方案1】:

试试这个公式。它并不完全准确,但我希望它足够准确:

FocusScale = 1 - 37.251 / uSize

【讨论】:

    【解决方案2】:
    Private Function pGetFocusScale(ByVal uSize As Double) As Double
    
        Dim d As Double
        d = 20 / (uSize / 2)
    
        Return 1 - d
    
    End Function
    

    用于

            Dim nPathGradientBrush As New PathGradientBrush(somePath)
            Dim dblFocusX As Double = pGetFocusScale(someRect.Width)
            Dim dblFocusY As Double = pGetFocusScale(someRect.Height)
            nPathGradientBrush.FocusScales = New System.Drawing.PointF(dblFocusX, dblFocusY)
    

    http://msdn.microsoft.com/de-de/library/system.drawing.drawing2d.pathgradientbrush.focusscales%28v=vs.110%29.aspx

    【讨论】:

    • 公式FocusScale = 1 - 37.251 / uSize 看起来更准确。 :)
    • @Dmitry 你从我发布的价值观中猜到了吗,我的意思是你是一个美丽的心灵,或者你是怎么知道 37.251 的?
    • 哦,不!我绝对不是一个美丽的心灵!我刚刚在 Excel 中手动尝试了几个数字。简单算法:如果 37.2 给出的结果低于预期,而 37.3 给出的结果超过预期,则切换到下一个数字:37.2(?) :)
    • @Dmitry 我希望你是对的,而不是我。我为我的配方苦苦挣扎了很长时间。关于我的价值观,你是对的。我认为您应该发布您的回复作为答案。我认为它更准确地符合我的问题。
    猜你喜欢
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多