File: linear.cal

package info (click to toggle)
apcalc 2.12.1.5-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 5,548 kB
  • ctags: 4,129
  • sloc: ansic: 53,374; makefile: 5,589; awk: 96; sed: 33; sh: 13
file content (26 lines) | stat: -rw-r--r-- 711 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
 * 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));
}