# SCM Repository

# View of /trunk/sml3d/src/geometry/planef.sml

Parent Directory | Revision Log

Revision

File size: 1770 byte(s)

**765**- (**download**) (**annotate**)*Sun Feb 14 16:30:15 2010 UTC*(9 years, 8 months ago) by*jhr*File size: 1770 byte(s)

Remove "3" from plane module names

(* planef.sml * * COPYRIGHT (c) 2009 John Reppy (http://cs.uchicago.edu/~jhr) * All rights reserved. * * Support for 3D planes using single-precision representation. *) structure Planef : PLANE where type flt = Float.flt = struct structure V = Vec3f type flt = V.flt type vec3 = V.vec3 type vec4 = V.vec4 (* a plane is represented as its normal vector <x, y, z> and the distance * to the origin along that vector. *) type plane = {nx : flt, ny : flt, nz : flt, d : flt} (* axis aligned planes; the order of the axes determines the plane's * facing following the right-hand rule. *) val xyPlane : plane = {nx = 0.0, ny = 0.0, nz = 1.0, d = 0.0} (* points toward +Z *) val xzPlane : plane = {nx = 0.0, ny = ~1.0, nz = 0.0, d = 0.0} (* points toward -Y *) val yxPlane : plane = {nx = 0.0, ny = 0.0, nz = ~1.0, d = 0.0} (* points toward -Z *) val yzPlane : plane = {nx = 1.0, ny = 0.0, nz = 0.0, d = 0.0} (* points toward +X *) val zxPlane : plane = {nx = 0.0, ny = 1.0, nz = 0.0, d = 0.0} (* points toward +Y *) val zyPlane : plane = {nx = ~1.0, ny = 0.0, nz = 0.0, d = 0.0} (* points toward -X *) fun fromPtNorm {p, n} = let val n = V.normalize n val d = ~ (V.dot(p, n)) in {nx = #x n, ny = #y n, nz = #z n, d = d} end fun fromNormDist {n : vec3, d : flt} = {nx = #x n, ny = #y n, nz = #z n, d = d} (* return the plane's unit normal vector *) fun norm (p : plane) = {x = #nx p, y = #ny y, z = #ny z} (* return signed distance from plane to point (positive means the * point is in front of the plane and negative means that it is * behind. *) fun distance (p : plane, {x, y, z}) = (#nx p * x) + (#ny p * y) + (#nz p * z) + #d p end

root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |

Powered by ViewVC 1.0.0 |