轉盤 6 個等角度扇區 (各 60°),但**中獎概率不同**。實現:將概率映射到 **0~1 區間**,隨機數落在哪個區間即中該獎。
struct Prize { int id; String name; double weight; }; // weight 如 0.5, 0.2, 0.15, 0.1, 0.04, 0.01
double cum = 0;
for (Prize p : prizes) {
p.min = cum;
cum += p.weight;
p.max = cum;
}
double r = Math.random();
for (Prize p : prizes) if (r >= p.min && r < p.max) return p;
前端僅展示,**中獎邏輯必須在後端**執行:前端請求 `/api/lottery/draw`,後端按上述算法決定結果,返回獎品 ID 與**目標角度**,前端按角度旋轉。
博客園詳細實現:https://www.cnblogs.com/mofish/archive/2013/01/24/2875516.html