|
|
@@ -44,22 +44,26 @@ export function buildDiagramOption(
|
|
|
const nearX = dNear >= 0 ? Math.min(maxD, Math.max(0, dNear)) : null
|
|
|
const farX = dFar > 0 ? Math.min(maxD, dFar) : null
|
|
|
|
|
|
- // 覆盖区域多边形(扬声器顶点 + 地面边界点,按 x 升序)
|
|
|
- const poly: [number, number][] = [[0, z]]
|
|
|
- const groundX = [nearX, farX].filter((v): v is number => v !== null).sort((a, b) => a - b)
|
|
|
- groundX.forEach((x) => poly.push([x, 0]))
|
|
|
-
|
|
|
const series: SeriesOption[] = []
|
|
|
|
|
|
- // 覆盖区域填充(三角形)
|
|
|
- if (groundX.length > 0) {
|
|
|
+ // 覆盖区域阴影:[0, z] + 地面交点围成的三角形
|
|
|
+ if (nearX !== null && farX !== null) {
|
|
|
+ // 按 X 轴坐标从小到大排序,避免折线图渲染时产生折返导致的填充错乱
|
|
|
+ const leftX = Math.min(nearX, farX)
|
|
|
+ const rightX = Math.max(nearX, farX)
|
|
|
+
|
|
|
series.push({
|
|
|
name: labels.coverage,
|
|
|
type: 'line',
|
|
|
- data: poly,
|
|
|
+ data: [
|
|
|
+ [0, z],
|
|
|
+ [leftX, 0],
|
|
|
+ [rightX, 0],
|
|
|
+ [0, z] // 显式闭合多边形,让 ECharts 准确填充内部
|
|
|
+ ],
|
|
|
showSymbol: false,
|
|
|
- lineStyle: { opacity: 0 },
|
|
|
- areaStyle: { color: pal.accent, opacity: 0.07 },
|
|
|
+ lineStyle: { opacity: 0 }, // 隐藏边框线,只要填充
|
|
|
+ areaStyle: { color: pal.accent, opacity: 0.1 },
|
|
|
silent: true,
|
|
|
z: 2
|
|
|
} as SeriesOption)
|