// 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<yj)) or ((yj<=y) and (y<yi))) and (x < (xj - xi) * (y - yi) / (yj - yi) + xi))
c = !c
j = i
i = i + 1
}
return c;
}
"Geometry.frink included OK"
View or download geometry.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 14705 days, 20 hours, 9 minutes ago.