feat: 题材小球改平方根映射,拉大中小涨幅区分度

线性映射被极端涨幅拉平均,多数 0~3% 题材球挤在最小值附近。
改平方根映射:零涨幅 4px、1%≈10px、3%≈15px、极值 22px,
中等涨幅区间球径差显著放大。碰撞力半径动态跟随节点,无需额外适配。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Sakurasan
2026-08-10 23:51:58 +08:00
co-authored by Claude
parent 254deb6a80
commit 69535bc782
+5 -4
View File
@@ -35,9 +35,9 @@ const MODES: { key: 1 | 4; label: string }[] = [
/* 图视图股票节点上限:按覆盖题材数降序保留最高穿透度的核心股 */ /* 图视图股票节点上限:按覆盖题材数降序保留最高穿透度的核心股 */
const MAX_STOCK_NODES = 800; const MAX_STOCK_NODES = 800;
/* 题材节点半径范围:按题材涨幅绝对值映射(涨得越猛球越大) */ /* 题材节点半径范围:按题材涨幅绝对值平方根映射(涨得越猛球越大,小涨幅区分更明显 */
const THEME_MIN_RADIUS = 6; const THEME_MIN_RADIUS = 4;
const THEME_MAX_RADIUS = 20; const THEME_MAX_RADIUS = 22;
/* 视图切换:关系图 / 核心股列表 */ /* 视图切换:关系图 / 核心股列表 */
type ViewMode = "graph" | "list"; type ViewMode = "graph" | "list";
@@ -673,7 +673,8 @@ function HotMapGraph({ graph }: { graph: ThemeGraph }) {
code: t.themeCode, code: t.themeCode,
coverCount: t.stockCount, coverCount: t.stockCount,
bf3: t.bf3, bf3: t.bf3,
radius: THEME_MIN_RADIUS + (Math.abs(bf3) / maxAbsBf3) * (THEME_MAX_RADIUS - THEME_MIN_RADIUS), // 平方根映射:同一个小涨幅区间内球径差异更大(线性映射被极端涨幅拉平均)
radius: THEME_MIN_RADIUS + Math.sqrt(Math.abs(bf3) / maxAbsBf3) * (THEME_MAX_RADIUS - THEME_MIN_RADIUS),
}; };
}); });
const edgeList: SimEdge[] = buildEdgesFromStocks(kept); const edgeList: SimEdge[] = buildEdgesFromStocks(kept);