在 PHP 中将等边范围映射到不对称范围(Hue 到 YIQ)

Map equilateral range to asymmetrical range (Hue to YIQ) in PHP

我需要一个函数来将具有 3 个大小相等的段的范围映射到具有不相等大小的段的范围。如下图table所示:

      (Red is all one range)
/--------------------------------\
| Color | Hue Range | YIQ Range  |
|=======|===========|============|
| Red   | 0 - 59    | 0 - 149    |
| Red   | 300 - 359 | 851 - 1000 |
| Green | 60 - 179  | 150 - 736  |
| Blue  | 180 - 299 | 737 - 850  |
\--------------------------------/

总体目标是将色调转换为 YIQ 范围。

如果映射是线性的,那么每个范围的公式就相当简单

 Determine what range given value H belongs to
 Get HueMIn, HueMax, YMin, YMax for this range
 Y = YMin + (H - HueMin) * (YMax - Ymin) / (HueMax - HueMin)

例如,值H=100在第三个范围内,

 Y = 150 + (100 - 60) * (736 - 150) / (179 - 60) = 347