使用黄金角(137.5°)分割色相环,实现整数 ID 与 RGB 颜色的双向映射,相邻 ID 颜色差异最大化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| import colorsys
import math
def id_to_color(id_num):
"""将整数 ID 转换为高对比度 RGB 颜色"""
hue = (id_num * 137.5) % 360 # 黄金角色相分配
hue /= 360.0
saturation, value = 0.8, 0.95
r, g, b = colorsys.hsv_to_rgb(hue, saturation, value)
return (int(r * 255), int(g * 255), int(b * 255))
def color_to_id(r, g, b):
"""从 RGB 颜色还原原始 ID"""
h, _, _ = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)
hue_angle = h * 360.0
return int(round((hue_angle / 137.5) % (360 / 137.5)))
|
核心特性
| 特性 | 说明 |
|---|
| 黄金角色相 | 137.5° 分割,数学证明最大化颜色差异 |
| 固定参数 | 饱和度 0.8、亮度 0.95,视觉友好 |
| 可逆映射 | ID ↔ 颜色双向转换,O(1) 复杂度 |
| 容量 | 支持 0 到 16,777,215(24 位 RGB 上限) |
输出示例
1
2
3
| ID 0 → RGB (243, 57, 57)
ID 1 → RGB (183, 243, 57)
ID 2 → RGB (57, 243, 126)
|
优势
- 数学最优:黄金角分配最大化颜色差异
- 零冲突:唯一双向映射
- 视觉友好:所有颜色明亮鲜艳
限制:ID 超过 16,777,215 时颜色重复。
Comments