c - 平方反比定律方程

标签 c math exponential inverse

我有一个光传感器,可以读取从 0 到 4095 的光强度。我努力使用光的平方反比定律编写一个方程,以便当光最低时(假设最低环境光为 50),它返回 1,如果最高 (4095),则返回 26,但至关重要的是,从 1 到 26 的增量需要光线呈指数级增加,即:

123 4 5  6   7      8         9              10                          ...27
light intensity ->

有什么方程式的建议吗?我似乎无法弄清楚。语言是 C。

最佳答案

您想要将 4095 到 50 的区间分成 25 个相等的部分 (26-1)。这意味着每个“强度段”的宽度是:

(4095-50)/25 = 161.8

因此,如果变量 x 的范围为 1 到 26,则距离方程为:

D = sqrt( 1 / (4095 - (x * 161.8)) )

这是采用 Intensity_value = 1/D^2 作为比例(我说“强度值”,因为如果它是真实强度,则这不包括比例常数 - 我们是处理这个问题的任意单位)。

换句话说,如果您将 x 绘制在一条线上,并且每个 x 值距原点的距离为 D,那么您将获取您显示的 126 的结果。从你的图表中,我假设当你向右移动时,强度正在减弱。

您应该能够将其推广到不同的强度范围和相应的 x 的不同范围。

关于c - 平方反比定律方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761508/

相关文章:

c - 如何存储可以初始化为整数或 float 的通用四个字节

c - 异步将值返回给父进程

c++ - 找到给定范围内的完美正方形的数量

r - 在 R 中找到第 N 个根

javascript - 我如何在 Javascript 中定义一个 float ?

c - 程序陷入停滞

c - 流和文件有什么区别?

math - 确定 (n-1)+(n-1) 的大 Oh

c++ - 使用 CGAL 对流形进行三角剖分

c++ - 使用 C++ 打印带有一个前导零的指数符号