精华内容
下载资源
问答
  • 基于python编写的三维物体的体积和表面积计算,运行需要安装VTK依赖包,实现简单,运行速度快。
  • 以后可能会对三维视觉进行一些学习和研究,最近做的项目需要训练模型,所以就空出来时间来入门学习一下。...扫描资料以点的形式记录,每一个点包含有三维坐标,有些可能含有色彩资讯(R,G,B)或物体反射面强度。.

    以后可能会对三维视觉进行一些学习和研究,最近做的项目需要训练模型,所以就空出来时间来入门学习一下。最近也学了下c++,正好拿来练手。
    这篇文章主要是对三维模型的一些介绍以及使用C++完成一个mesh封闭模型的表面积和体积的计算。
    完整代码以及OBJ模型在文章后链接中。

    enter description here

    三维模型表达方式

    三维模型表达方式即组成三维模型的方式。常见的有:基于图元的CAD模型、三维点云、Mesh网格模型、体素化模型、八叉树表示、TSDF表示等

    enter description here

    三维点云

    点云是指透过3D扫描器所得到的形式。
    扫描资料以点的形式记录,每一个点包含有三维坐标,有些可能含有色彩资讯(R,G,B)或物体反射面强度。
    点云数据除了具有几何位置以外,还有强度信息,强度信息的获取是根据激光扫描仪接受装置采集到的回波强度。

    enter description here

    mesh网格

    Mesh是多边形网格,是计算机图形学中用于各种不规律物体建模的一种数据结构。这些网格通常由三角形、四边形或者其它的简单凸多边形组成,这样可以简化渲染过程。但是,网格也可以包括带有空洞的普通多边形组成的物体。

    在多边形网格的面片中三角面片是被分割的最小单位,且表示比较简单、灵活并且拓扑描述方便,所以被广泛使用,所以mesh常常指代三角面片

    表示方式即是顶点信息的简单列表以及其他法向量等信息的列表。
    enter description here

    如上图中 组成这个的三维模型就是由一个个的三角星面(三维下的)组成的。
    一维坐标系组成的最小单位是点,二位坐标系组成的最小单位是直线段,三维坐标系下组成的最下单位就可以是三角面。(自己推测 无实际参考证明)

    体素化模型

    是将物体的几何形式表示转换成最接近该物体的体素表示形式,产生体数据集,其不仅包含模型的表面信息,而且能描述模型的内部属性。表示模型的空间体素跟表示图像的二维像素比较相似,只不过从二维的点扩展到三维的立方体单元,而且基于体素的三维模型有诸多应用。
    enter description here

    三维模型格式

    3D模型的种类非常的多,不同应用领域、不同功能属性,加密的独有的通用的等等。有非常多的格式。如OBJ、FBX、GLB、3MF、B3D、PLY、U3D等等

    下面介绍几种常见的3D模型格式

    OBJ

    OBJ文件是Alias | Wavefront公司为它的一套基于工作站的3D建模和动画软件“AdvancedVisualizer”开发的一种标准3D模型文件格式。

    OBJ 格式支持点、线、纹理顶点、面和自由形状的几何图形(曲线和曲面)等多边形几何图形。此格式不支持动画或与场景的光线和位置相关的信息。OBJ 文件通常是由CAD(计算机辅助设计)生成的 3D 建模过程的最终产品。

    该文件格式是开放的,并已由其他供应商为其 3D 图形应用程序实施。

    FBX

    FBX,FilmBox,是一种流行的 3D 文件格式,最初由 Kaydara 为 MotionBuilder 开发,是许多 3D 工具使用的主要 3D 交换格式之一,FBX 有二进制和 ASCII 文件格式。

    FBX 是一种专有格式,Autodesk 提供了一个 C++ FBX SDK,用于从 FBX 文件读取、写入和转换。

    GLB

    GLB 是以 GL 传输格式 ( glTF )保存的 3D 模型的二进制文件格式表示。
    能够表述的信息有二进制格式的节点层次结构、相机、材料、动画和网格。这种二进制格式将 glTF 信息(JSON、.bin 和图像)存储在二进制 blob 中。

    计算三维模型表面积和体积

    由于OBJ文件是可直接读取的,易操作因此使用OBJ格式的文件。三维模型的表达方式就使用mesh三角形面片。

    enter description here

    详解OBJ文件格式

    每行代表一条数据

    行首含义示例
    #注释# Max2Obj Version 4.0
    v一个顶点的坐标(x y z)v 27.591814 173.004517 -51.917446
    vt顶点的纹理坐标信息vt 0.000000 0.916667 0.000000
    vn三维法向量(x y z)vn -0.004955 0.097663 -0.020915
    f顶点/纹理坐标/法线 三个索引f 1/1/1 2/2/2 3/3/3

    其中fface也就是面,一行数据表示的是一个面,一个面包含三个顶点(三角面片组成的),一个点具有“顶点/纹理坐标/法线”3个索引值,索引的是前面3个列表的信息。
    f 1/1/1 2/2/2 3/3/3表示的就是这个面由 第 1,2,3个顶点组成的,法线是 第1,2,3个法线。

    enter description here
    (上图为 从源文件中每部分都截取出来一些 代码中进行测试)

    根据OBJ的格式我们就可以获取到各个面上的各个顶点的坐标,就可以进行表面积和体积的计算。

    OBJ文件读取

    根据上面OBJ的格式可以得知,需要把顶点坐标读取到一个迭代器中(因为不知道有多少个顶点 无法使用数组,并且相比于数组我更喜欢用迭代器)。
    这里要定义一个顶点坐标的结构体

    struct Points{  // 顶点坐标
        float num_x;
        float num_y;
        float num_z;
    };
    

    vt vnv 一样都是三个float类型的 ,所以都是用这个结构体就可以了。

    对于一个面,里面包含了三组信息(顶点索引,纹理索引、法向量索引),每组信息里面又有三个信息(三个顶点、三个纹理特征、三个法向量)。
    因此使用嵌套式结构体。索引只需要使用 int 就可以了。

    struct Face_Index{
        int fri_point;
        int sec_point;
        int thi_point;
    };
    struct Faces{
        Face_Index points_index; // 一个面上的三个点的坐标索引
        Face_Index wenli_index; // 一个面上的三个点的纹理索引
        Face_Index normal_index; // 一个面上的 三个法向量索引
    
    };
    

    定义三个存放数据的迭代器,迭代器的数据类型是相对应的结构体。

    //  顶点坐标,法向量,面中对应的index, 分别放到了一个迭代器中
    vector<Points> ve_points;
    vector<Points> normal_vectors;
    vector<Faces> faces_index;
    

    接下来只需要进行读取每行数据,然后根据数据前面的开头判断数据的特征,判断后将数据进行字符串的一些处理获取到需要的数据,将相对应的数据放到相对应的迭代器中。

    表面积计算

    需要求的是整个三维模型的表面积,那么只需要求出来每个面的表面积。
    通过高数中学的知识可知,根据三个顶点坐标,利用两个边向量的叉乘即可算出来三角面的面积
    enter description here

    根据线代里面学的很容易就能推导出 面积的公式

    //叉乘公式  两个向量叉乘 即为两个向量组成的平行四边形的面积 除以2及时组成的三角形的面积
    double triangle_area(float p1X, float p1Y, float p1Z,
                         float p2X, float p2Y, float p2Z,
                         float p3X, float p3Y, float p3Z)
    {
        double ax = p2X - p1X;
        double ay = p2Y - p1Y;
        double az = p2Z - p1Z;
        double bx = p3X - p1X;
        double by = p3Y - p1Y;
        double bz = p3Z - p1Z;
        double cx = ay*bz - az*by;
        double cy = az*bx - ax*bz;
        double cz = ax*by - ay*bx;
        return (double)(0.5 * sqrt(cx*cx + cy*cy + cz*cz));
    }
    

    体积计算

    在计算三维模型的体积时,我们选择一个内部的点O,每个三角面片跟这个点就构成了一个四面体,而我们计算每个四面体的体积,再叠加到一块即可以得出三维模型的体积。

    enter description here
    可参考论文中计算四面体的公式(也可自行推导) 论文链接

    结论如下
    enter description here
    只需要一个面的三个顶点坐标再叠加每个面的顶点形成四面体的体积 即可得出三维模型的体积。

    //推导四面体的公式  https://zhuanlan.zhihu.com/p/26140241
    double triangle_volume(float p1X, float p1Y, float p1Z,
                           float p2X, float p2Y, float p2Z,
                           float p3X, float p3Y, float p3Z)
    {
        double v321 = p3X*p2Y*p1Z;
        double v231 = p2X*p3Y*p1Z;
        double v312 = p3X*p1Y*p2Z;
        double v132 = p1X*p3Y*p2Z;
        double v213 = p2X*p1Y*p3Z;
        double v123 = p1X*p2Y*p3Z;
        return (double)(1.0/6.0)*(-v321 + v231 + v312 - v132 - v213 + v123);
    }
    

    结果验证

    在能够读取OBJ文件,能够计算表面积和体积之后,只需要将获取到顶点的迭代器进行遍历。然后将每个面上的点放入进计算表面积和体积的函数中,即可得出最终的结果

    在计算出结果后,使用软件Blender进行验证。
    enter description here

    小数点前的数一致,由于某些未知原因并不是完全一样,但是也可得出计算结果是没什么问题的。
    (经测试应该是由于单位的原因,Blender软件中得出的值与计算出的值数量级不同。后几位数不同的原因经测试不是由于数据类型的原因,具体原因还不清楚)

    如果以上内容帮助到了你,还请点赞、关注、收藏.
    完整代码 链接

    展开全文
  • 通过(按立方体加、按立方体减、按坐标减)3种方法,分别计算三维形体的表面积...


    题目

    在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。

    每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。

    请你返回最终形体的表面积。

    示例 1:

    输入:[[2]]
    输出:10

    示例 2:

    输入:[[1,2],[3,4]]
    输出:34

    示例 3:

    输入:[[1,0],[0,2]]
    输出:16

    示例 4:

    输入:[[1,1,1],[1,0,1],[1,1,1]]
    输出:32

    示例 5:

    输入:[[2,2,2],[2,1,2],[2,2,2]]
    输出:46

    提示:

    1 <= N <= 50
    0 <= grid[i][j] <= 50


    题解

    题目本身从描述看理解不太容易,我也是看了10几遍才理解,简单解释下:

    示例一:[[2]]

    表示在二维平面上,坐标为(0,0)的位置上,有一个高度为2的立方体

    示例 2:[[1,2],[3,4]]

    以左下角为原点(0,0),不同位置表示立方体高度,立方体的排列方式如下:
    3 4
    1 2

    示例 3:[[1,0],[0,2]]

    立方体的排列方式如下:
    0 2
    1 0

    示例 4:[[1,1,1],[1,0,1],[1,1,1]]

    立方体的排列方式如下:
    1 1 1
    1 0 1
    1 1 1
    在这里插入图片描述

    示例 5:[[2,2,2],[2,1,2],[2,2,2]]

    立方体的排列方式如下:
    2 2 2
    2 1 2
    2 2 2


    解法一(按立方体加)

    思路:对每个坐标位置的立方体,对6个面暴露的部分累加求和,分别站在每个面前面,从前到后进行求解,当然从算法层面可以对程序进行优化,但为了代码可读性依然保留了写作初始思路。

    1. 只要有立方体(值大于0),则上下两个面的值都会暴露
    2. 对于第一排的立方体,暴露的面等于立方体高度(值大小)
    3. 对于后排的立方体,暴露的面等于高出前面立方体的高度(后面值减去当前值)
    • 时间复杂度:O(M*N)
    • 空间复杂度:O(1)
    # author: suoxd123@126.com
    class Solution:
        def surfaceArea(self, grid: List[List[int]]) -> int:
            cnt, m,n = 0, len(grid),len(grid[0])        
            for i in range(0,m):
                for j in range(0,n):
                    # 上下面
                    if grid[i][j] > 0:
                        cnt += 2
                    # 前面
                    if i == 0: # 第一排
                        cnt += grid[i][j]
                    elif grid[i][j] > grid[i-1][j]:# 后排
                        cnt += grid[i][j] - grid[i-1][j]
                    # 后面
                    if i == m - 1: # 第一排
                        cnt += grid[i][j]
                    elif grid[i][j] > grid[i+1][j]: # 后排
                        cnt += grid[i][j] - grid[i+1][j]
                    # 左面
                    if j == 0: # 第一排
                        cnt += grid[i][j]
                    elif  grid[i][j] > grid[i][j-1]: # 后排
                        cnt += grid[i][j] - grid[i][j-1]
                    # 右面
                    if j == n - 1: # 第一排
                        cnt += grid[i][j]
                    elif grid[i][j] > grid[i][j+1]: # 后排
                        cnt += grid[i][j] - grid[i][j+1]
            return cnt
    

    解法二(按立方体减)

    思路:对每个坐标位置的立方体,减去6个面中被隐藏的部分。

    1. 上下两个面的值,仅当立方体大于一个时,在中间的部分才被隐藏了
    2. 第一排的立方体不会被隐藏,对于后排的立方体,隐藏的面等于相交的最小值
    3. 相交的面会减少两个立方体的暴露,因此一个方向仅需要遍历1次
    • 时间复杂度:O(M*N)
    • 空间复杂度:O(1)

    当然,解法一也可以按照当前的写法进行改造,相邻两个立方体高度差即为暴露的部分,即前后方向使用:cnt += abs(grid[i][j] - grid[i-1][j])代替解法一中分别对前面和后面的计算。

    # author: suoxd123@126.com
    class Solution:
        def surfaceArea(self, grid: List[List[int]]) -> int:
            cnt, ov = 0, 0 # cnt:立方体总个数, ov:相交次数
            m,n = len(grid),len(grid[0])
            for i in range(0,m):
                for j in range(0,n):
                    cnt += grid[i][j]
                    # 上下面
                    if grid[i][j] > 1:
                        ov += grid[i][j] - 1
                    # 前后 方向
                    if i > 0:# 后排
                        ov += min(grid[i][j], grid[i-1][j])
                    # 左右 方向
                    if j > 0: # 后排
                        ov += min(grid[i][j] , grid[i][j-1])
            return cnt * 6 - ov * 2
    

    解法三(按坐标减)

    思路:跟解法二类似,都是总体面积减去隐藏面积,不过是将坐标对应立方体看做一个整体单元,而非解法二中组成立方体的单个小立方体,当然也可以类推,基于解法一思路实现“按坐标加”。

    1. 每个坐标位置如果没有任何遮挡,暴露面积为 4 h + 2 = 6 ∗ h − 2 ( h − 1 ) 4h+2 = 6*h - 2 (h - 1) 4h+2=6h2(h1),h为立方体高度,即grid[i][j]的值
    2. 减去四周被遮挡的面积,每个面被遮挡的面积等于较小的值
    3. 对于等于0的坐标,面积不存在,直接跳过
    • 时间复杂度:O(M*N)
    • 空间复杂度:O(1)
    # author: suoxd123@126.com
    class Solution:
        def surfaceArea(self, grid: List[List[int]]) -> int:
            cnt, m,n = 0, len(grid),len(grid[0])        
            for i in range(0,m):
                for j in range(0,n):
                    if grid[i][j] <= 0:#当前坐标不存在立方体
                        continue
                    cnt += 4 * grid[i][j] + 2                
                    if i > 0:# 前面
                        cnt -= min(grid[i][j], grid[i-1][j])
                    if i < m - 1:# 后面
                        cnt -= min(grid[i][j], grid[i+1][j])
                    if j > 0:# 左面
                        cnt -= min(grid[i][j], grid[i][j-1])
                    if j < n - 1:# 右面
                        cnt -= min(grid[i][j], grid[i][j+1])
            return cnt
    
    展开全文
  • 推荐:在二维的时候使用叉乘公式,三维的时候使用海伦公式~~~不过如果是需要符号的情况时,就只能使用行列式的计算公式了。 2.叉乘和行列式 先介绍一下三维中的两点之间距离之式,和二维的...

    1.利用海伦公式:

    利用两点之间距离公式,求出三角形的三边长a,b,c后,令p = (a+b+c)/2。再套入以下公式就可以求出三角形的面积S :

    S = sqrt(p*(p-a)*(p-b)*(p-c))

    推荐:在二维的时候使用叉乘公式,三维的时候使用海伦公式~~~不过如果是需要符号的情况时,就只能使用行列式的计算公式了。

    2.叉乘和行列式

    先介绍一下三维中的两点之间距离之式,和二维的几乎一样:d = sqrt((x0-x1)^2 + (y0-y1)^2 + (z0-z1)^2)

    再介绍叉乘,中心内容!叉乘在定义上有:两个向量进行叉乘得到的是一个向量,方向垂直于这两个向量构成的平面,大小等于这两个向量组成的平行四边形的面积。

    在直角座标系[O;i,j,k]中,i、j、k分别为X轴、Y轴、Z轴上向量的单位向量。设P0(0,0,0),P1(x1,y1,z1),P2(x2,y2,z2)。因为是从原点出发,所以向量P0P1可简记为P1,向量P0P2可简记为P2。依定义有:

         |i j k |
    P1×P2 = |x1 y1 z1|
         |x2 y2 z2|

    展开,得到:

    上式 = iy1z2 + jz1x2 + kx1y2 - ky1x2 - jx1z2 - iz1y2

       = (y1z2 - y2z1)i + (x2z1 - x1z2)j + (x1y2 - x2y1)k

    按规定,有:单位向量的模为1。可得叉积的模为:

    |P1×P2| = y1z2 - y2z1 + x2z1 - x1z2 + x1y2 - x2y1

         = (y1z2 + x2z1 + x1y2) - (y2z1 + x1z2 + x2y1)

    开始正式内容。我们设三角形的三个顶点为A(x0,y0,z0),B(x1,y1,z1),C(x2,y2,z2)。我们将三角形的两条边AB和AC看成是向量。然后,我们以A为原点,进行坐标平移,得到向量B(x1-x0,y1-y0,z1-z0),向量C(x2-x0,y2-y0,z2-z0)。

    ①在三维的情况下,直接代入公式,可得向量B和向量C叉乘结果的模为:

    |B×C| = ((y1-y0)*(z2-z0) + (z1-z0)*(x2-x0) + (x1-x0)*(y2-y0)) -
         ((y2-y0)*(z1-z0) + (z2-z0)*(x1-x0) + (x2-x0)*(y1-y0))

         | 1 1 1 |
        = |x1-x0 y1-y0 z1-z0|
         |x2-x0 y2-y0 z2-z0|

    它的一半即为所要求的三角形面积S。

    还有一种比较简单的写法。将向量AB和AC平移至原点后,设向量B为(x1,y1,z1),向量C为(x2,y2,z2),则他们的叉乘所得向量P为(x,y,z),其中:

    |y1 z1| |z1 x1| |x1 y1|
    x = | | y = | | z = | |
    |y2 z2| |z2 x2| |x2 y2|

    然后用三维中的两点之间距离公式,求出(x,y,z)与(0,0,0)的距离,即为向量P的模,它的一半就是所要求的面积了。

    以上公式都很好记:x分量由y,z分量组成,y分量由z,x分量组成,z分量由x,y分量组成,恰好是循环的。坐标平移一下就好了。

    ②在二维的情况下,我们可以取z = 0这个平面,即令z1 = z2 = 0,且

    |P1×P2| = x1y2 - x2y1

          |x1 y1|
         = | |
          |x2 y2|

    所以:
          
    |B×C| = (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)

         |x1-x0 y1-y0|
        = | |
         |x2-x0 y2-y0|

    它的一半即为所要求的三角形的面积S。

    注意,用行列式求出来的面积是带符号的。如果A,B,C是按顺时针方向给出,则S为负;按逆时针方向给出,则S为正。

    以二维的情况为例,三维亦同:

    A(0,0) B(0,1) C(1,0) (A,B,C按顺时针方向给出)

    S = ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))/2;
    = ((0 - 0)*(0 - 0)-(1 - 0)*(1 - 0))/2
    = -0.5

    A(1,0) B(0,1) C(0,0) (A,B,C按逆时针方向给出)

    S = ((x1-x0)*(y2-y0)-(x2-x0)*(y1-y0))/2;
    = ((0 - 1)*(0 - 0)-(0 - 1)*(1 - 0))/2
    = 0.5

    如果你不需要符号的话,再求一下绝对值就好了。这样也不用去管给出的点的顺序了。

     

     

     

    展开全文
  • 题目: ...首先将二维坐标系中的所有方块按照独立的进行计算表面积,即方块数*6,然后计算需要减去的值,两个方块相连,表面积减去2,即分为两步, 1.当前坐标本身,需要减去的表面积为:(方块数-1)*2...

    题目:

    在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。

    每个值 v = grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。

    请你返回最终形体的表面积。

    思考:

    首先将二维坐标系中的所有方块按照独立的进行计算表面积,即方块数*6,然后计算需要减去的值,两个方块相连,表面积减去2,即分为两步,
    1.当前坐标本身,需要减去的表面积为:(方块数-1)*2;
    2.当前坐标左边需要减去的表面积为:min(左边方块数,当前方块数)*2;
    3.当前坐标上边需要减去的表面积为:min(上边方块数,当前方块数)*2;

    class Solution {
        public int surfaceArea(int[][] grid) {
            int result = 0;
            int temp = 0;
            for (int i = 0; i < grid.length; i++) {
                for (int j = 0; j < grid[0].length; j++) {
                    result += grid[i][j]*6;
                    //坐标点不止一个元素时
                    if(grid[i][j]>0) {
                        temp += (grid[i][j] - 1) * 2;
                        //二维坐标系最上边一行
                        if(i==0&&j>0){
                            if(grid[i][j-1]>0){
                                temp += Math.min(grid[i][j],grid[i][j-1])*2;
                            }
                        }
                        //二维坐标系最最左边一行
                        if(i>0&&j==0){
                            if(grid[i-1][j]>0){
                                temp += Math.min(grid[i][j],grid[i-1][j])*2;
                            }
                        }
                        //二维坐标系其他元素
                        if(i>0&&j>0){
                            if(grid[i][j-1]>0){
                                temp += Math.min(grid[i][j],grid[i][j-1])*2;
                            }
                            if(grid[i-1][j]>0){
                                temp += Math.min(grid[i][j],grid[i-1][j])*2;
                            }
                        }
                    }
                }
            }
            return result - temp;
        }
    }
    
    展开全文
  • 问题:判断点P是否在三角形ABC内 ...判断一个点是否在在三角形内,最常用的两种方法...算法虽然很简单,但要做到高效却不容易,要考虑到二维、三维的区别,还要考虑到坐标是用浮点数还是用整数来表示。  
  • 地面三维激光扫描技术与全站仪测量技术、近景摄影测量技术相比有其自身的优势,主要特点有:非接触测量、数据采用频率高、精度高全景复制等特点。本章主要学习三维激光扫描入门基础知识。主要内容有:一、基本概念;...
  • 实景城市三维管理平台 福建三维前沿航空科技有限公司联合多方资源,成功开发出城市实景城市三维管理平台,将城市辖区的各种比例尺的矢量数据、影像数据管理维护起来,实现以下功能: ▲实景城市三维管理平台功能...
  • 3D游戏世界是由三维物体组成的,通过记录这些物体的位置(position)、定向(orientation)、比例(scale)等信息,把这些属性变换至屏幕空间,使得物体能够被渲染在屏幕上;通过不断改变物体的这些属性来产生动画效果。 ...
  • 使数据图形化便于快速除错,简直是横断面计算的利器,简单强大的横断面积计算函数(未注册时返回结果为乱码) ,可让您无需在CAD端成图,即可直接在EXCEL中得出横断面积,而且当您计算表中某个数据发生改变时,自动...
  • 三维体数据之构造与分析

    千次阅读 2019-07-23 15:24:01
    作者:dongyx         三维体模型通过拓扑闭合、高精度的三角网表示三维实体对象,常用来表达离散的三维实体对象。...支持计算模型的体积、表面积,截取模型的任意剖面...
  • SuperMap 三维产品白皮书

    万次阅读 2017-03-31 18:08:29
    SuperMap 三维基于完全自主研发的二三维一体化 GIS 技术体系,并将三维 GIS 技术贯穿 到从组件、桌面到客户端再到移动端的全系列产品中,为用户提供强大实用的 GIS 功能与逼真 的三维可视化效果,突破了单纯三维可视...
  • 红绿蓝不同颜色线段表示该线段属于不同的三维空间坐标轴方向。 (c) 全景图经过超像素过分割的结果。图中纯红色部分表示水平方向的平面,如地面或者天花板;条纹状的红色区域表示垂直的平面,如墙壁。 (d) 根据...
  • 游戏中的三维数学

    千次阅读 2015-08-31 09:45:29
    一、点和矢量 ...在三维笛卡尔坐标系中又分为左右手坐标系,用左右手来方便做记忆,大拇指指向X轴,食指指向Y轴,中指指向Z轴,3指垂直即可建立模型。左右坐标系的转换只需要把一个轴转换,保留另外两个轴的
  • 平均曲率、主曲率和高斯曲率是曲率的个基本要素。 平均曲率:是空间上曲面上某一点任意两个相互垂直的正交曲率的平均值。如果一组相互垂直的正交曲率可表示为K1,K2,那么平均曲率则为:K = (K1 +K2 ) / 2。 主曲率...
  • 3D模型展示以及体积、表面积计算

    千次阅读 2018-03-20 13:05:00
    上次为大家提供了3D模型的展示之后 发现网上有很多想要计算3D模型表面积和体积的需求 那么经过掉了几百根头发的艰辛历程之后 终于为大家解决了这一需求 按照惯例先上图为证 当然我这样写 有的人认为我在忽悠 你说...
  • 简单的说:齐次坐标就是在原有坐标上加上一个维度: 使用齐次坐标有什么优势? 1、能非常方便的表达点在直线或平面上 在2D平面上,一条直线 l 可以用方程 ax + by + c = 0 来表示,该直线用向量表示的话一般记做 ...
  • 实景三维系列2 | 实景三维模型的应用价值和意义目录 实景三维模型有哪些有价值的信息? 实景三维建模效率和精度如何? 实景三维建模可以应用于哪些领域? 实景三维模型有哪些有价值的信息?...
  • 新一代三维GIS技术体系再升维

    千次阅读 多人点赞 2018-11-14 10:09:22
    在2018 GIS 软件技术大会上,超图发布了SuperMap GIS 9D(2019)系列产品,该版本全面拥抱空间大数据技术,并在微服务、容器化、云原生、自动化运维等方面全新升级,进一步优化和提升了云GIS功能,构建了新一代三维GIS...
  • 三维GIS

    千次阅读 2011-07-02 23:55:18
    三维GIS可能包括的十项功能:数据采集和检验有效性;数据结构化和转化为新的结构(包括创建拓扑关系和从一种拓扑关系...计算(体积、表面积、中心、距离、方向);分析;可视化;系统管理。===========================
  • 三维图像技术与OpenGL基础理论

    千次阅读 2016-08-04 11:58:50
    主题 OpenGL ...英文原文: 3D Graphics with OpenGL Basic Theory ...中文译文: 三维图像技术与OpenGL基础理论 1. 计算机图像硬件 1.1 GPU(图像处理单元) 如今,计算机拥有用来专
  • 通过线激光器扫描物体,同时用摄像机对其拍照得到带有结构光的图片,提取结构光上的点的三维坐标,激光器扫描整个物体就可求出所有点的三维坐标实现物体表面的三维重构,即可测量物体表面任意两点距离。 准备知识...
  • 三维重建综述(更新到2020年)

    千次阅读 2020-07-17 21:50:39
    1 三维重建的定义与发展 三维重建是计算机视觉和计算机图形学领域的研究热点,旨在从给定的图像数据集或视频中恢复几何模型。20世纪60年代,计算机视觉得到了最初的发展,该阶段的三维重建技术以二维的RGB图像作为...
  • 整理的算法模板合集: ACM模板 目录 一、三维基础操作 1.1 三维点积(Dot3) 1.2 三维叉积(Cross3) 1.3 矢量差(Subt) 1.4.1 返回ab,ac,ad的混合积(Volume6) 1.4.2 四面体体积(Volume6) 1.5 求四面体的重心...
  • 高博14讲--第三讲 三维空间刚体运动

    千次阅读 2019-07-07 21:44:20
    高博14讲--第三讲 三维空间刚体运动旋转矩阵点和向量、坐标系对极约束推导过程本质矩阵八点法八点法推导过程本质矩阵$\ E$的SVD分解八点法的讨论合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片...
  • 需要掌握的知识点有: 向量、矩阵以及它们的运算 坐标系的概念和坐标系之间的变换齐次坐标的概念二维图形的各种变换窗口与视区的变换1 、引言 向量对于图形学的重要性,计算机图形学中,主要处理三维世界中的物体...
  • 三维装箱模型

    千次阅读 热门讨论 2021-05-06 18:18:51
    第i种货物的数量、三维尺寸和重量分别为nin_{i}ni​、li×wi×hil_{i} \times w_{i} \times h_{i}li​×wi​×hi​、mim_{i}mi​求在满足一定现实约束的条件下,尽可能实现使用集装器的占地面积小。同时考虑以下5种...
  • 本文代码是检测一个物体的特征包含面积,圆度,周长,然后生产一个三维散点图。 【2】图像处理类(ConcludeFeature.py) import cv2 import numpy as np import math class ConcludeFeatures: #初始化参数 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,292
精华内容 4,116
关键字:

三维坐标计算表面积