// Formulae for simple plane geometry. // Find the length of the hypotenuse of a right triangle given sides a and b. hypotenuseLength[a, b] := sqrt[a^2 + b^2] // Calculate area of arbitrary triangle given 3 sides of known length. // Calculate using Heron's formula. triangleArea[a, b, c] := { // Semiperimeter s s = 1/2 (a + b + c) area = sqrt[s (s-a) (s-b) (s-c)] return area } // Find the distance between a point (x0,y0) and a line specified by // two points (x1, y1), (x2, y2) pointToLineDistance[x0, y0, x1, y1, x2, y2] := { abs[ (x2-x1)(y1-y0) - (x1-x0)(y2-y1)] / sqrt[(x2-x1)^2+(y2-y1)^2 ] } // Returns true if a point is inside a polygon. // Adapted from // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html // // points is an array of two-dimensional arrays of points. // x,y is the point to test. // // Returns: // true if [x,y] is inside the polygon, false otherwise. pointInPolygon[points, x, y] := { c = false i = 0 npol = length[points] j = npol-1 while i < npol { xi = points@i@0 xj = points@j@0 yi = points@i@1 yj = points@j@1 if ((((yi<=y) and (y