Mercurial > gemma
view pkg/common/linear.go @ 5652:9b3779f649c2 v5.7.1
Bumped version for release.
author | Sascha Wilde <wilde@sha-bang.de> |
---|---|
date | Mon, 07 Aug 2023 17:59:18 +0200 |
parents | 18d5461bec5d |
children |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2019 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package common // Linear constructs a function which maps x1 to y1 and x2 to y2. // All other values are interpolated linearly. func Linear(x1, y1, x2, y2 float64) func(float64) float64 { // f(x1) = y1 // f(x2) = y2 // y1 = x1*a + b <=> b = y1 - x1*a // y2 = x2*a + b // y1 - y2 = a*(x1 - x2) // a = (y1-y2)/(x1 - x2) for x1 != x2 if x1 == x2 { return func(float64) float64 { return 0.5 * (y1 + y2) } } a := (y1 - y2) / (x1 - x2) b := y1 - x1*a return func(x float64) float64 { return x*a + b } }