mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
27 lines
711 B
Plaintext
27 lines
711 B
Plaintext
/*
|
|
* 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));
|
|
}
|