红绿灯计算器
原创本地试算:输入路口信号灯各相位秒数与「当前灯色 + 已亮秒数」(或倒计时读数),计算:
- 本相位还剩多久
- 距下次绿灯 / 红灯还有多久
- 一个完整周期多长
- (可选)步行过街是否赶得及
> 仅供估算;实地以灯态与交警设施为准。禁止输出怂恿超速或闯灯的建议。
何时使用
- 「红灯还要等多久」
- 「绿闪还有几秒变黄」
- 「过街 20 米能不能这波过」
硬约束
- 相位时长均
> 0;支持自定义顺序,默认循环:绿 → 黄 → 红(可配置行人专用相等价相位)。 - 当前状态:
phase+elapsedSec(已显示秒)或remainSec(倒计时);二者只取一种,优先remainSec。 - 输出整数秒(四舍五入)+ 下一变灯的相对时间;可选绝对时刻(需用户提供现在时钟)。
- 过街估算:
crossingSec = distanceM / walkSpeed(默认 1.2 m/s),与绿灯剩余比较,给「建议等待 / 可谨慎通过」——黄灯一律建议停。 - 文案免责:不同路口有箭头灯、感应配时,本模型为固定周期近似。
推荐模型
export type Phase = 'green' | 'yellow' | 'red'
export type LightConfig = {
green: number
yellow: number
red: number
/** 相位顺序,默认绿黄红 */
order?: Phase[]
}
const roundSec = (n: number) => Math.max(0, Math.round(n))
export function cycleLength(c: LightConfig) {
return c.green + c.yellow + c.red
}
export function remainInPhase(input: {
config: LightConfig
phase: Phase
elapsedSec?: number
remainSec?: number
}) {
const dur = input.config[input.phase]
if (input.remainSec != null) return roundSec(Math.min(dur, Math.max(0, input.remainSec)))
const elapsed = input.elapsedSec ?? 0
return roundSec(Math.max(0, dur - elapsed))
}
/** 从当前相位剩余,累加直到目标相位再次开始 */
export function secondsUntilPhase(
config: LightConfig,
current: Phase,
remain: number,
target: Phase,
) {
const order = config.order ?? (['green', 'yellow', 'red'] as Phase[])
let i = order.indexOf(current)
let wait = remain
// 先走完当前剩余;若目标就是当前且 remain>0,则 wait=remain(「还要亮多久」)
if (current === target) return roundSec(remain)
for (let step = 0; step < order.length; step++) {
i = (i + 1) % order.length
const p = order[i]
if (p === target) return roundSec(wait)
wait += config[p]
}
return roundSec(wait)
}
export function canCrossOnGreen(opts: {
greenRemainSec: number
distanceM: number
walkMps?: number
bufferSec?: number
}) {
const need = opts.distanceM / (opts.walkMps ?? 1.2) + (opts.bufferSec ?? 2)
const ok = opts.greenRemainSec >= need
return { needSec: roundSec(need), ok, advice: ok ? '绿灯剩余较充足,仍须左右观察' : '建议等下一轮绿灯' }
}
Agent 执行步骤
- 收集:绿/黄/红秒数;当前灯色;剩余或已过秒数。
- 输出:周期、本相剩余、距绿灯、距红灯;需要时做步行过街判断。
- 黄灯/红灯场景明确「停车等待」,不给抢黄灯话术。
附加
- README.md · reference.md · templates/usage.md