mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
57 lines
1.9 KiB
Plaintext
57 lines
1.9 KiB
Plaintext
/*
|
|
* linear - perform a simple two point 2D linear interpolation
|
|
*
|
|
* Copyright (C) 2005-2007 Landon Curt Noll
|
|
*
|
|
* Calc is open software; you can redistribute it and/or modify it under
|
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
|
* Public License for more details.
|
|
*
|
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* @(#) $Revision: 30.2 $
|
|
* @(#) $Id: linear.cal,v 30.2 2007/03/17 05:57:42 chongo Exp $
|
|
* @(#) $Source: /usr/local/src/bin/calc/cal/RCS/linear.cal,v $
|
|
*
|
|
* Under source code control: 2005/12/12 06:41:50
|
|
* File existed as early as: 2005
|
|
*
|
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
|
*/
|
|
|
|
/*
|
|
* linear - perform a simple two point 2D linear interpolation
|
|
*
|
|
* given:
|
|
* x0, y0 first known point on the line
|
|
* x1, y1 second knonw point on the line
|
|
* x a given point to interpolate on
|
|
*
|
|
* returns:
|
|
* y such that (x,y) is on the line defined by (x0,y0) and (x1,y1)
|
|
*
|
|
* NOTE: The line cannot be vertical. So x0 != y0.
|
|
*/
|
|
define linear(x0, y0, x1, y1, x)
|
|
{
|
|
/* firewall */
|
|
if (!isnum(x0) || ! isnum(y0) || !isnum(x1) || ! isnum(y1) || !isnum(x)) {
|
|
quit "non-numeric argument passed to linear";
|
|
}
|
|
if (x0 == x1) {
|
|
quit "linear given a line with an infinite slope";
|
|
}
|
|
|
|
/* return y = y0 + (delta_Y/delta_X) * (x - x0) */
|
|
return y0 + (((y1-y0)/(x1-x0)) * (x - x0));
|
|
}
|