Matlab geom3d函数解析
geom3d函数库
geom3d库的目的是处理和可视化三维几何原语,如点、线、平面、多面体等。它提供了操作三维几何原语的底层功能,使得开发更复杂的几何算法变得更加容易。
| 序号 | 函数名 | 作用 | 输入 | 输出 |
| --- | --- | --- | --- | --- |
| 1 | area = triangleArea3d(pt1, pt2, pt3)
| 获取三角形面积 | 三个点坐标 [10 10 10], [30 10 10], [10 40 10] | 面积 |
| 2 | area = polygonArea3d(poly, varargin)
| 获取三维多边形的面积 | 点的坐标向量poly = [10 30 20;20 30 20;20 40 20;10 40 20] | 面积 |
| 3 | centroid = polygonCentroid3d(varargin)
| 获取三维多边形的中点 | 点坐标 poly = [0 0 0; 10 0 10;10 10 20;0 10 10] | 点坐标 |
| 4 | point = projPointOnPlane(point, plane)
| 点在平面上的正交投影 | 点坐标[ x,y,z]和平面点、两个向量 [X0 Y0 Z0 VX1 VY1 VZ1 VX2 VY2 VZ2] | 点坐标 |
| 5 | [newLine, isOrthogonal] = projLineOnPlane(line, plane)
| 直线在平面上的投影 | 输入为线和平面 | 是否正交 |
| 6 | point = projPointOnLine3d(point, line)
| 点在线上的投影 | 输入为点和线 | 输出为点坐标 |
| 7 | n = planeNormal(plane)
| 计算平面的法向量 | PLANE : [x0 y0 z0 dx1 dy1 dz1 dx2 dy2 dz2] | N : [dx dy dz] |
| 8 | b = isPointOnLine3d(point, line, varargin)
|** 判断点是否在直线上** | point 和 line | |
| 9 | varargout = angleSort3d(pts, varargin)
| 根据共面点在平面上的角度对其进行排序。|
| 10 | box = boundingBox3d(points)
| 点集的包围盒 | 点集| [xmin xmax ymin ymax zmin zmax] |
| 11 | vol = box3dVolume(box)
| 三维包围盒的体积| |
| 12 | point = circle3dPoint(circle, pos)
| 点在三维圆上的坐标 |
| 13 | theta = circle3dPosition(point, circle)
| 三维点在三维圆上的角度 |
| 14 | poly2 = clipConvexPolygon3dHP(poly, plane)
| 用半空间裁剪一个三维的多边形 | 多边形和平面 |输出为点集 |
| 15 | clipped = clipEdge3d(edge, box)
| 用长方体修剪三维边 |
| 16 | edge = clipLine3d(line, box)
| 用长方体修剪三维线 | 线和长方体 | 返回边 |
| 17 | poly2 = clipPolygon3dHP(poly, plane)
| 用平面来裁剪三维多边形 |
| 18 | createEdge3d
| 创建一个三维的两点之间的线 | 两个点 | 边 |
| 19 | createLine3d
| 创建线 | 两个点 | 线 |
| 20 | plane = createPlane(varargin)
| 创建平面 | 输入为三个点 | 平面 |
| 21 | mat = createRotation3dLineAngle(line, theta)
| 围绕一个线旋转一定的角度 | line 和角度 | 矩阵 |
| 22 | trans = createScaling3d(varargin)
| 创建一个4X4的缩放矩阵
| 23 | trans = createTranslation3d(varargin)
| 创建一个4X4的平移矩阵 |
| 24 | createRotationOx
|
| 25 | createRotationOy
|
| 26 | createRotationOz
|
| 27 | ROT = createRotationVector3d(A,B)
| 计算两个向量 之间的旋转 |
| 28 | TFM = createRotationVectorPoint3d(A,B,P)
|
| 29 | c = crossProduct3d(a,b)
| 叉乘 |
| 30 | varargout = cyl2cart(varargin)
| 柱坐标转换成笛卡尔坐标系 |
| 31 | Surface area of a cylinder.
| 圆柱的表面积 |
| 32 | theta = dihedralAngle(plane1, plane2)
| 计算两个面之间的二面角 |
| 33 | [d, pt1, pt2] = distanceLines3d(line1, line2)
| 计算两条线之间的距离 |
| 34 | [dist, t] = distancePointEdge3d(point, edge)
| 计算点到线的距离 |
| 35 | d = distancePointLine3d(point, line)
| 计算点到线的距离 |
| 36 | d = distancePointPlane(point, plane)
| 计算点到面的距离 |
| 37 | dist = distancePoints3d(p1, p2, varargin)
| 两个点之间的距离 |
| 38 | [dist, proj] = distancePointTriangle3d(point, triangle)
| 点与三角形之间的最短距离 |
| 39 | drawAxis3d(varargin)
| 画一个彩色的坐标系和远点,图标 |
| 40 | varargout = drawEdge3d(varargin)
| 绘制边 |
| 41 | drawBox3d
| 绘制一个三维的立方盒子 |
| 42 | varargout = drawCircle3d(varargin)
| 绘制一个三维的圆 |
| 43 | varargout = drawCircleArc3d(arc, varargin)
| 绘制一个圆弧 |
| 44 | varargout = drawCube(cube, varargin)
| 绘制一个三维的立方体,最后旋转 |
| 45 | varargout = drawCuboid(cuboid, varargin)
| 绘制三维的长方体 |
| 46 | varargout = drawCylinder(cyl, varargin)
|
| 47 | varargout = drawEllipse3d(varargin)
| 绘制三维椭圆 |
| 48 | varargout = drawEllipseCylinder(cyl, varargin)
|
| 49 | varargout = drawEllipsoid(elli, varargin)
| 绘制椭球体 |
| 50 | varargout = drawGrid3d(varargin)
| 绘制3D网格 |
| 51 | varargout = drawLabels3d(varargin)
| 指定3D位置绘制标签 |
| 52 | drawPlane3d(plane, varargin)
| 绘制被当前坐标系裁剪的平面|
| 53 | varargout = drawPlatform(plane, siz, varargin)
| 画一个给定尺寸的矩形平台 |
| 54 | h = drawPoint3d(varargin)
| 绘制三维点 |
| 55 | varargout = drawPolygon3d(varargin)
|绘制由顶点坐标列表指定的三维多边形|
| 56 | varargout = drawPolyline3d(varargin)
| 绘制由顶点坐标列表指定的三维折线。 |
| 57 | varargout = drawSphere(varargin)
| 画一个球体的网格 |
| 58 | varargout = drawSphericalEdge(sphere, edge, varargin)
| 在球面上画一条边 |
| 59 | varargout = drawSphericalPolygon(sphere, poly, varargin)
| 画一个球面多边形 |
| 60 | len = edgeLength3d(edge, varargin)
| 三维边的长度 |
| 61 | line = edgeToLine3d(edge)
|将三维边转换成线 |
| 62 | s = ellipsoidSurfaceArea(elli)
| 球体的表面积 |
| 63 | ell = equivalentEllipsoid(points)
| 三维点集的等效椭球面 |
| 64 | mat = eulerAnglesToRotation3d(phi, theta, psi, varargin)
| 将三维欧拉角转换为三维旋转矩阵 |
| 65 | varargout = fillPolygon3d(varargin)
| 填充由顶点坐标列表指定的3D多边形 |
| 66 | varargout = fillSphericalPolygon(sphere, poly, germ)
| 填充一个球面多边形 |
| 67 | varargout = fillSphericalTriangle(sphere, p1, p2, p3, varargin)
| 在球体上填充一个三角形 |
| 68 | trans = fitAffineTransform3d(pts1, pts2)
| 使用两个点集拟合仿射变换 |
| 69 | [fittedCircle, circleNormal] = fitCircle3d(pts)
| 拟合圆 |
| 70 | fitEllipse3d
|
| 71 | fitLine3d
|
| 72 | fitPlane
|
| 73 | h = hypot3(dx, dy, dz)
| 三维包围盒的对角线长度 |
| 74 | box = intersectBoxes3d(box1, box2)
| 三维盒子的交集|
| 75 | point = intersectEdgePlane(edge, plane, varargin)
| 边和面的交点|
| 76 | points = intersectLineCylinder(line, cylinder, varargin)
| 线和圆柱的交点 |
| 77 | point = intersectLinePlane(line, plane, varargin)
| 线和面的交点 |
| 78 | [inter, inside]= intersectLinePolygon3d(line, poly)
| 直线与三维多边形的交点 |
| 79 | points = intersectLineSphere(line, sphere, varargin)
|
| 80 | [point, pos, isInside] = intersectLineTriangle3d(line, triangle, varargin)
| 三维直线和三维三角形的交点 |
| 81 | line = intersectPlanes(plane1, plane2, varargin)
| 面和面的交线 |
| 82 | circle = intersectPlaneSphere(plane, sphere)
| 平面与球面的交点圆 |
| 83 | [inter, inside]= intersectRayPolygon3d(ray, poly)
| 三维射线与三维多边形的交点 |
| 84 | point = intersectThreePlanes(plane1, plane2, plane3)
| 三个面的交点 |
| 85 | below = isBelowPlane(point, varargin)
| 测试一个点在平面上还是平面下 |
| 86 | copl = isCoplanar(x,y,z,tol)
| 测试输入点的共面性 |
| 87 | b = isParallel3d(v1, v2, varargin)
| 判断向量是否平行 |
| 88 | b = isPerpendicular3d(v1, v2, varargin)
| 判断向量的正交性 |
| 89 | d = isPlane(plane)
| 判断是否为面 |
| 90 | a = isTransform3d(trans, varargin)
| 判断是否为变换矩阵 |
| 91 | pos = linePosition3d(point, line)
| 返回投影在3D直线上的3D点的位置 |
| 92 | edge = lineToEdge3d(line)
| 将直线转化成边 |
| 93 | plane = medianPlane(p1, p2)
| 两点中间的平面 |
| 94 | box = mergeBoxes3d(box1, box2)
| 合并3D盒,通过计算他们的最大范围 |
| 95 | varargout = midPoint3d(varargin)
| 两个三维点的中点或三维边的中点 |
| 96 | plane2 = normalizePlane(plane1)
| 将平面的参数表示标准化 |
| 97 | vn = normalizeVector3d(v)
| 向量标准化 |
| 98 | S = oblateSurfaceArea(elli, varargin)
| 近似扁椭球的表面积 |
| 99 | box3d = orientedBox3d(pts)
| 带朝向的包围盒 |
| 100 | res = parallelLine3d(line, point)
| 创建平行的直线 |
| 101 | res = parallelPlane(plane, point)
| 创建平行面 |
| 102 | n = planeNormal(plane)
| 计算平面的法向量 |
| 103 | coord = planePoint(plane, point)
| 计算平面上点的三维位置 |
| 104 | coord = planePoint(plane, point)
| 计算平面上点的三维位置-- |
| 105 | pos = planePosition(point, plane)
| 计算点在平面上的位置-- |
| 106 | out = planesBisector(plane1, plane2)
| 两个其它平面之间的平分线平面 |
| 107 | theta = polygon3dNormalAngle(points, ind)
| 三维多边形顶点的法向角 |
全部函数简介
% GEOM3D Geometry 3D Toolbox % Version 1.22 06-Jun-2018 . % % 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 or other 3d shapes. % 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 . % crossProduct3d - 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. % edges3d - Description of functions operating on 3D edges. % createLine3d - Create a line with various inputs. % createEdge3d - Create an edge between two 3D points, or from a 3D line. % 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. % isPointOnLine3d - Test if a 3D point belongs to a 3D 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. % edgeLength3d - Return the length of a 3D edge. % clipEdge3d - Clip a 3D edge with a cuboid box. % lineToEdge3d - Convert a 3D straight line to a 3D finite edge. % edgeToLine3d - Convert a 3D edge to a 3D straight line. % clipLine3d - Clip a line with a box and return an edge. % drawEdge3d - Draw 3D edge in the current axes. % drawLine3d - Draw a 3D line clipped by the current axes. % % 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. % isPlane - Check if input is a plane. % transformPlane3d - Transform a 3D plane with a 3D affine transform. % 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. % intersectThreePlanes - Return intersection point between 3 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. % projLineOnPlane - Return the orthogonal projection of a line on a 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 by the current axes. % % 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. % polygon3dNormalAngle - Normal angle at a vertex of the 3D polygon. % intersectLinePolygon3d - Intersection point of a 3D line and a 3D polygon. % 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 vertex coords. % drawPolyline3d - Draw a 3D polyline specified by a list of vertex coords. % fillPolygon3d - Fill a 3D polygon specified by a list of vertex coords. % % 3D Triangles % triangleArea3d - Area of a 3D triangle. % distancePointTriangle3d - Minimum distance between a 3D point and a 3D triangle. % intersectLineTriangle3d - Intersection point of a 3D line and a 3D triangle. % % 3D circles and ellipses % circles3d - Description of functions operating on 3D circles. % fitCircle3d - Fit a 3D circle to a set of points. % 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 % equivalentEllipsoid - Equivalent ellipsoid of a set of 3D points. % fitEllipse3d - Fit an ellipse to a set of points. % ellipsoidSurfaceArea - Approximated surface area of an ellipsoid. % oblateSurfaceArea - Approximated surface area of an oblate ellipsoid. % prolateSurfaceArea - Approximated surface area of a prolate ellipsoid. % cylinderSurfaceArea - Surface area of a cylinder. % 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. % drawEllipsoid - Draw a 3D ellipsoid. % drawTorus - Draw a torus (3D ring). % drawCylinder - Draw a cylinder. % drawEllipseCylinder - Draw a cylinder with ellipse cross-section. % 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. % orientedBox3d - Object-oriented 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. % fitAffineTransform3d - Fit an affine transform using two point sets. % registerPoints3dAffine - Fit 3D affine transform using iterative algorithm. % 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. % isTransform3d - Check if input is a affine transformation 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. % createRotationVector3d - Calculates the rotation between two vectors. % createRotationVectorPoint3d - Calculates the rotation between two vectors. % 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. % drawPlatform - Draw a rectangular platform with a given size. % drawLabels3d - Draw text labels at specified 3D positions. % % % Credits: % * Several functions contributed by Sven Holcombe % * function isCoplanar was originally written by Brett Shoelson. % * Songbai Ji enhanced file intersectPlaneLine (6/23/2006). % * several functions contributed by oqilipo % % ------ % Author: David Legland % e-mail: david.legland@inra.fr % Created: 2005-11-07 % Homepage: http://github.com/mattools/matGeom % http://www.pfl-cepia.inra.fr/index.php?page=geom3d % Copyright 2005 INRA % In development: % clipPolygon3dHP - clip a 3D polygon with Half-space. % drawPartialPatch - draw surface patch, with 2 parametrized surfaces. % Deprecated: % vectorCross3d - Vector cross product faster than inbuilt MATLAB cross. % inertiaEllipsoid - Inertia ellipsoid of a set of 3D points. % Others