「弱峰调整」升级:三组识别规则 + 滑动条 ±400% 梯度驱动
一、三组识别规则(以波峰 k 为例;L/l = 左相邻波峰/波谷,r/R = 右相邻波谷/波峰; leftMean = (L+l)/2,rightMean = (r+R)/2) - 第一类:v < leftMean 且 v < rightMean(两侧的"相邻峰+相邻谷"均值都要低于) - 第二类:v < leftMean 或 v < rightMean(放宽为"或") - 第三类:v < L 且 v < R(只与左右同类极值比较,最宽松) 波谷把"低于"换成"高于"、min/max 互换。三组不是包含关系(第三类不蕴含第二类), 因此确实存在"只满足第三类"的点。 二、梯度驱动(滑动条 |a| ∈ [0,400%];每组自身仍是 ±200%) 0–100% :只有第一类在动(0–100%) 100–200% :第一类 100–200%,第二类开始 0–100% 200–300% :第一类到上限,第二类 100–200%,第三类开始 0–100% 300–400% :前两类到上限,第三类 100–200% 负值完全对称。实现:first = sign*min(|a|,2)、second = sign*clamp(|a|-1,0,2)、 third = sign*clamp(|a|-2,0,2);某点同时满足多组时取幅度绝对值最大的一组(= 最严格的那组)。 三、每组自身的目标值映射(±200%) 0 – +100% :当前值 → 左右同类极值中较温和的一侧(波峰取较低者、波谷取较高者) +100 – +200%:该侧 → 左右同类极值的均值(不再是"较大的那个") 0 – -100% :当前值 → 相邻异类极值中较近的一个(波峰取较高的波谷、波谷取较低的波峰) -100 – -200%:该侧 → 相邻异类极值的均值(不再是"最小的那个") 负幅度的"不得反向增强"夹取保持不变;相邻极值之间的 smoothstep 平滑偏移逐字未改。 四、界面 滑动条量程 -400% – +400%(0 在正中间,kWeakPeakSliderScale = 4.0);数值列按 "+400%" 取宽; 右侧数值始终带符号。 五、验证(全部离屏,不占用鼠标/键盘/屏幕) - uitest 463/463:第一类点(弱峰 520、相邻峰 620/640)0/50/100/150/200% → 520/570/620/625/630; 弱谷 580 → 580/540/500/500/500,负值 590/600/605/610; 只满足第二类的峰 130:100% 不动、150/200/250/300/400% → 140/150/162.5/175/175; 负值 -100% 不动、-150/-200/-250/-300% → 115/100/97.5/95; 只满足第三类的峰 195:200% 不动、250/300/400% → 197.5/200/200; 第一类点 200% 已达上限(400% 不再变化);±400% 夹取;默认 0%;滑块中间 = 0%、 两端 = ±400%、轨道 3/4 处 ≈ +200%。 - [Y] 端到端:合成 ripple 弱峰区间 20 → 70(50% 幅度,健康 120)。 - panperf PASS;layercheck clobbers=0/24、pan frames wrong=0/4;cursorcheck 30/30; dragcheck 0 绘制错误;make clean && make all 零警告。
This commit is contained in:
1 parent
14b60f5d9e
commit
59a84ba126
6 files changed
+217
-111
No files matched your search
@@ -43,7 +43,7 @@ namespace jdi
|
||||
MOVE_SIGNAL, /**< 拖拽信号曲线到其它网格。 */
|
||||
EDGE_MOVE, /**< 拖动「边沿计数」的横向光标(上下移动幅值)。 */
|
||||
EDGE_PANEL_MOVE, /**< 拖动边沿计数浮动面板。 */
|
||||
PEAK_LEVEL, /**< 拖动「弱峰调整」某信号的等级滑块(0–200%)。 */
|
||||
PEAK_LEVEL, /**< 拖动「弱峰调整」某信号的幅度滑块(-400% – +400%)。 */
|
||||
PEAK_ITERATIONS, /**< 拖动「弱峰调整」某信号的迭代次数滑块(1 … 该信号自定义上限)。 */
|
||||
LANE_REORDER /**< 拖动网格图例中的 GX 编号徽标:上下调整网格次序。 */
|
||||
};
|
||||
@@ -577,7 +577,7 @@ namespace jdi
|
||||
{
|
||||
int fileIndex = -1; /**< 信号所属文件下标。 */
|
||||
int signalIndex = -1; /**< 文件内信号下标。 */
|
||||
int amountPercent = 0; /**< 弱峰调整幅度(-200–200,默认 0 = 不改动)。 */
|
||||
int amountPercent = 0; /**< 弱峰调整幅度(-400–400,默认 0 = 不改动)。 */
|
||||
int iterations = 1; /**< 迭代次数 N(1–10)。 */
|
||||
};
|
||||
|
||||
@@ -614,7 +614,7 @@ namespace jdi
|
||||
/**
|
||||
* @brief 获取弱峰调整曲线(按「信号 + 增强等级 + 迭代次数」缓存)。
|
||||
* @param [IN] signal 目标信号。
|
||||
* @param [IN] amountPercent 弱峰调整等级(0–200,整数百分比)。
|
||||
* @param [IN] amountPercent 弱峰调整幅度(-400–400,整数百分比)。
|
||||
* @param [IN] iterations 迭代次数 N(1–10)。
|
||||
* @return 曲线数值数组(长度与 `signal.values` 相同;缺失处为 NaN)。
|
||||
*/
|
||||
@@ -625,7 +625,7 @@ namespace jdi
|
||||
* @brief 取某个时刻的弱峰调整曲线取值(用于纵向光标的取值标注)。
|
||||
* @param [IN] file 信号所属文件。
|
||||
* @param [IN] signal 目标信号。
|
||||
* @param [IN] amountPercent 弱峰调整等级(0–200)。
|
||||
* @param [IN] amountPercent 弱峰调整幅度(-400–400)。
|
||||
* @param [IN] iterations 迭代次数 N(1–10)。
|
||||
* @param [IN] time 采样时刻。
|
||||
* @param [OUT] value 输出取值。
|
||||
@@ -1308,7 +1308,7 @@ namespace jdi
|
||||
* @param [IN] signal 目标信号。
|
||||
* @param [IN] points 均值点数 X(仅 `MEAN_FILTER` 使用)。
|
||||
* @param [IN] iterations 迭代次数 N。
|
||||
* @param [IN] amountPercent 弱峰调整等级(仅 `WEAK_PEAK` 使用,0–200)。
|
||||
* @param [IN] amountPercent 弱峰调整幅度(仅 `WEAK_PEAK` 使用,-400–400)。
|
||||
* @param [IN] begin 需要的采样区间起点(含)。
|
||||
* @param [IN] end 需要的采样区间终点(不含)。
|
||||
* @param [OUT] spanBegin 返回数组对应的首个采样下标。
|
||||
@@ -1337,7 +1337,7 @@ namespace jdi
|
||||
int kind = 0; /**< `DerivedCurveKind`。 */
|
||||
int points = 5; /**< 均值点数 X。 */
|
||||
int iterations = 1; /**< 迭代次数 N。 */
|
||||
int amountPercent = 0; /**< 弱峰调整等级(0–200)。 */
|
||||
int amountPercent = 0; /**< 弱峰调整幅度(-400–400)。 */
|
||||
|
||||
bool operator==(const CurveKey& other) const
|
||||
{
|
||||
@@ -1474,7 +1474,7 @@ namespace jdi
|
||||
* @param [IN,OUT] g 绘图上下文。
|
||||
* @param [IN] resolved 信号视图。
|
||||
* @param [IN] lane 网格绘制信息。
|
||||
* @param [IN] amountPercent 弱峰调整等级(0–200)。
|
||||
* @param [IN] amountPercent 弱峰调整幅度(-400–400)。
|
||||
* @param [IN] iterations 迭代次数 N(1–10)。
|
||||
*/
|
||||
void PaintWeakPeakCurve(gd::Graphics& g, const ResolvedSignal& resolved, const LaneVisual& lane,
|
||||
@@ -1773,7 +1773,7 @@ namespace jdi
|
||||
struct WeakPeakCurveEntry
|
||||
{
|
||||
const SignalData* signal = nullptr;
|
||||
int amountPercent = 0; /**< 弱峰调整幅度(-200–200,默认 0 = 不改动)。 */
|
||||
int amountPercent = 0; /**< 弱峰调整幅度(-400–400,默认 0 = 不改动)。 */
|
||||
int iterations = 1; /**< 迭代次数 N(1–10)。 */
|
||||
std::vector<float> values; /**< 与 signal->values 等长;缺失处为 NaN。 */
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user