from
geom3d
by David Legland Library to handle 3D geometric primitives: create, intersect, display, and make basic computations
Contents.m
% GEOM3D Geometry 3D Toolbox
% Version 1.0 21-Mar-2011 .
%
% Creation, transformations, algorithms and visualization of geometrical
% 3D primitives, such as points, lines, planes, polyhedra, circles and
% spheres.
%
% Euler Angles are defined as follow:
% PHI is the azimut, i.e. the angle of the projection on horizontal plane
% with the Ox axis, with value beween 0 and 180 degrees.
% THETA is the latitude, i.e. the angle with the Oz axis, with value
% between -90 and +90 degrees.
% PSI is the 'roll', i.e. the rotation around the (PHI, THETA) direction,
% with value in degrees
% See also the 'angles3d' page.
%
% Base format for primitives:
% Point: [x0 y0 z0]
% Vector: [dx dy dz]
% Line: [x0 y0 z0 dx dy dz]
% Edge: [x1 y1 z1 x2 y2 z2]
% Plane: [x0 y0 z0 dx1 dy1 dz1 dx2 dy2 dz2]
% Sphere: [x0 y0 z0 R]
% Circle: [x0 y0 z0 R PHI THETA PSI] (origin+center+normal+'roll').
% Ellipsoid: [x0 y0 z0 A B C PHI THETA PSI]
% Cylinder: [X1 Y1 Z1 X2 Y2 Z2 R]
% Box: [xmin xmax ymin ymax zmin zmax]. Used for clipping shapes.
%
% Polygons are represented by N-by-3 array of points, the last point is
% not necessarily the same as the first one. Points must be coplanar.
%
%
% 3D Points
% points3d - Description of functions operating on 3D points
% midPoint3d - Middle point of two 3D points or of a 3D edge
% isCoplanar - Tests input points for coplanarity in 3-space.
% transformPoint3d - Transform a point with a 3D affine transform
% distancePoints3d - Compute euclidean distance between pairs of 3D Points
% clipPoints3d - Clip a set of points by a box
% drawPoint3d - Draw 3D point on the current axis.
%
% 3D Vectors
% vectors3d - Description of functions operating on 3D vectors
% transformVector3d - Transform a vector with a 3D affine transform
% normalizeVector3d - Normalize a 3D vector to have norm equal to 1
% vectorNorm3d - Norm of a 3D vector or of set of 3D vectors
% hypot3 - Diagonal length of a cuboidal 3D box
% vectorCross3d - Vector cross product faster than inbuilt MATLAB cross.
% vectorAngle3d - Angle between two 3D vectors
% isParallel3d - Check parallelism of two 3D vectors
% isPerpendicular3d - Check orthogonality of two 3D vectors
% drawVector3d - Draw vector at a given position
%
% Angles
% angles3d - Conventions for manipulating angles in 3D
% anglePoints3d - Compute angle between three 3D points
% sphericalAngle - Compute angle between points on the sphere
% angleSort3d - Sort 3D coplanar points according to their angles in plane
% randomAngle3d - Return a 3D angle uniformly distributed on unit sphere
%
% Coordinate transforms
% sph2cart2 - Convert spherical coordinates to cartesian coordinates
% cart2sph2 - Convert cartesian coordinates to spherical coordinates
% cart2sph2d - Convert cartesian coordinates to spherical coordinates in degrees
% sph2cart2d - Convert spherical coordinates to cartesian coordinates in degrees
% cart2cyl - Convert cartesian to cylindrical coordinates
% cyl2cart - Convert cylindrical to cartesian coordinates
%
% 3D Lines and Edges
% lines3d - Description of functions operating on 3D lines
% createLine3d - Create a line with various inputs.
% fitLine3d - Fit a 3D line to a set of points
% parallelLine3d - Create 3D line parallel to another one.
% projPointOnLine3d - Project a 3D point orthogonally onto a 3D line
% distancePointLine3d - Euclidean distance between 3D point and line
% distancePointEdge3d - Minimum distance between a 3D point and a 3D edge
% linePosition3d - Return the position of a 3D point projected on a 3D line
% distanceLines3d - Minimal distance between two 3D lines
% transformLine3d - Transform a 3D line with a 3D affine transform
% reverseLine3d - Return same 3D line but with opposite orientation
% midPoint3d - Middle point of two 3D points or of a 3D edge
% clipLine3d - Clip a line with a box and return an edge
% drawEdge3d - Draw 3D edge in the current Window
% drawLine3d - Draw a 3D line on the current axis
%
% Planes
% planes3d - Description of functions operating on 3D planes
% createPlane - Create a plane in parametrized form
% fitPlane - Fit a 3D plane to a set of points
% normalizePlane - Normalize parametric representation of a plane
% parallelPlane - Parallel to a plane through a point or at a given distance
% reversePlane - Return same 3D plane but with opposite orientation
% planesBisector - Bisector plane between two other planes
% projPointOnPlane - Return the orthogonal projection of a point on a plane
% intersectPlanes - Return intersection line between 2 planes in space
% intersectLinePlane - Intersection point between a 3D line and a plane
% intersectEdgePlane - Return intersection point between a plane and a edge
% distancePointPlane - Signed distance betwen 3D point and plane
% isBelowPlane - Test whether a point is below or above a plane
% medianPlane - Create a plane in the middle of 2 points
% planeNormal - Compute the normal to a plane
% planePosition - Compute position of a point on a plane
% planePoint - Compute 3D position of a point in a plane
% dihedralAngle - Compute dihedral angle between 2 planes
% drawPlane3d - Draw a plane clipped in the current window
%
% 3D Polygons and curves
% polygons3d - Description of functions operating on 3D polygons
% polygonCentroid3d - Centroid (or center of mass) of a polygon
% polygonArea3d - Area of a 3D polygon
% triangleArea3d - Area of a 3D triangle
% polygon3dNormalAngle - Normal angle at a vertex of the 3D polygon
% intersectLinePolygon3d - Intersection point of a 3D line and a 3D polygon
% intersectLineTriangle3d - Intersection point of a 3D line and a 3D triangle
% intersectRayPolygon3d - Intersection point of a 3D ray and a 3D polygon
% clipConvexPolygon3dHP - Clip a convex 3D polygon with Half-space
% drawPolygon3d - Draw a 3D polygon specified by a list of vertices
% drawPolyline3d - Draw a 3D polyline specified by a list of vertices
% fillPolygon3d - Fill a 3D polygon specified by a list of points
%
% 3D circles and ellipses
% circles3d - Description of functions operating on 3D circles
% circle3dPosition - Return the angular position of a point on a 3D circle
% circle3dPoint - Coordinates of a point on a 3D circle from its position
% circle3dOrigin - Return the first point of a 3D circle
% drawCircle3d - Draw a 3D circle
% drawCircleArc3d - Draw a 3D circle arc
% drawEllipse3d - Draw a 3D ellipse
%
% Spheres
% spheres - Description of functions operating on 3D spheres
% createSphere - Create a sphere containing 4 points
% intersectLineSphere - Return intersection points between a line and a sphere
% intersectPlaneSphere - Return intersection circle between a plane and a sphere
% drawSphere - Draw a sphere as a mesh
% drawSphericalEdge - Draw an edge on the surface of a sphere
% drawSphericalTriangle - Draw a triangle on a sphere
% fillSphericalTriangle - Fill a triangle on a sphere
% drawSphericalPolygon - Draw a spherical polygon
% fillSphericalPolygon - Fill a spherical polygon
% sphericalVoronoiDomain - Compute a spherical voronoi domain
%
% Smooth surfaces
% inertiaEllipsoid - Inertia ellipsoid of a set of 3D points
% ellipsoidSurfaceArea - Approximated surface area of an ellipsoid
% drawEllipsoid - Draw a 3D ellipsoid
% intersectLineCylinder - Compute intersection points between a line and a cylinder
% revolutionSurface - Create a surface of revolution from a planar curve
% surfaceCurvature - Curvature on a surface from angle and principal curvatures
% drawTorus - Draw a torus (3D ring)
% drawCylinder - Draw a cylinder
% drawSurfPatch - Draw a 3D surface patch, with 2 parametrized surfaces
%
% Bounding boxes management
% boxes3d - Description of functions operating on 3D boxes
% boundingBox3d - Bounding box of a set of 3D points
% intersectBoxes3d - Intersection of two 3D bounding boxes
% mergeBoxes3d - Merge 3D boxes, by computing their greatest extent
% box3dVolume - Volume of a 3-dimensional box
% randomPointInBox3d - Generate random point(s) within a 3D box
% drawBox3d - Draw a 3D box defined by coordinate extents
%
% Geometric transforms
% transforms3d - Conventions for manipulating 3D affine transforms
% createTranslation3d - Create the 4x4 matrix of a 3D translation
% createScaling3d - Create the 4x4 matrix of a 3D scaling
% createRotationOx - Create the 4x4 matrix of a 3D rotation around x-axis
% createRotationOy - Create the 4x4 matrix of a 3D rotation around y-axis
% createRotationOz - Create the 4x4 matrix of a 3D rotation around z-axis
% createBasisTransform3d - Compute matrix for transforming a basis into another basis
% eulerAnglesToRotation3d - Convert 3D Euler angles to 3D rotation matrix
% rotation3dToEulerAngles - Extract Euler angles from a rotation matrix
% createRotation3dLineAngle - Create rotation around a line by an angle theta
% rotation3dAxisAndAngle - Determine axis and angle of a 3D rotation matrix
% recenterTransform3d - Change the fixed point of an affine 3D transform
% composeTransforms3d - Concatenate several space transformations
%
% Various drawing Functions
% drawGrid3d - Draw a 3D grid on the current axis
% drawAxis3d - Draw a coordinate system and an origin
% drawAxisCube - Draw a colored cube representing axis orientation
% drawCube - Draw a 3D centered cube, eventually rotated
% drawCuboid - Draw a 3D cuboid, eventually rotated
%
%
% Credits:
% * function isCoplanar was originally written by Brett Shoelson.
% * Songbai Ji enhanced file intersectPlaneLine (6/23/2006).
%
% ------
% Author: David Legland
% e-mail: david.legland@grignon.inra.fr
% Created: 2005-11-07
% Homepage: http://matgeom.sourceforge.net/
% http://www.pfl-cepia.inra.fr/index.php?page=geom3d
% Copyright 2005 INRA - CEPIA Nantes - MIAJ (Jouy-en-Josas).
% In development:
% clipPolygon3dHP - clip a 3D polygon with Half-space
% drawPartialPatch - draw surface patch, with 2 parametrized surfaces
% Deprecated:
% point3dBounds - Bounding box of a set of 3D points
% intersectPlaneLine - return intersection between a plane and a line
% translation3d - return 4x4 matrix of a 3D translation
% scale3d - return 4x4 matrix of a 3D scaling
% rotationOx - return 4x4 matrix of a rotation around x-axis
% rotationOy - return 4x4 matrix of a rotation around y-axis
% rotationOz - return 4x4 matrix of a rotation around z-axis
% scaling3d - return 4x4 matrix of a 3D scaling
% vecnorm3d - compute norm of vector or of set of 3D vectors
% normalize3d - normalize a 3D vector
% drawCurve3d - draw a 3D curve specified by a list of points
% createEulerAnglesRotation - Create a rotation matrix from 3 euler angles
% Others