Major changes: logic add to panel, local variables, panel histor, users management...
This commit is contained in:
@@ -204,6 +204,34 @@ func (n *DerivativeNode) Process(inputs []float64, state map[string]any) (float6
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// ── IntegrateNode ─────────────────────────────────────────────────────────────
|
||||
|
||||
// IntegrateNode accumulates the time-integral of input[0] using the trapezoidal
|
||||
// rule, where dt is in seconds. On the first call it returns 0 (no interval yet).
|
||||
type IntegrateNode struct{}
|
||||
|
||||
func (n *IntegrateNode) Type() string { return "integrate" }
|
||||
func (n *IntegrateNode) Process(inputs []float64, state map[string]any) (float64, error) {
|
||||
if len(inputs) == 0 {
|
||||
return 0, errors.New("integrate: no inputs")
|
||||
}
|
||||
now := time.Now()
|
||||
acc, _ := state["acc"].(float64)
|
||||
if prevVal, ok := state["prev_val"].(float64); ok {
|
||||
if prevTime, ok := state["prev_time"].(time.Time); ok {
|
||||
dt := now.Sub(prevTime).Seconds()
|
||||
if dt < 0 {
|
||||
dt = 0
|
||||
}
|
||||
acc += (inputs[0] + prevVal) * 0.5 * dt
|
||||
}
|
||||
}
|
||||
state["acc"] = acc
|
||||
state["prev_val"] = inputs[0]
|
||||
state["prev_time"] = now
|
||||
return acc, nil
|
||||
}
|
||||
|
||||
// ── ClampNode ─────────────────────────────────────────────────────────────────
|
||||
|
||||
// ClampNode clamps the output to [Min, Max].
|
||||
|
||||
Reference in New Issue
Block a user