经过大量的思考和实验,我得到了答案!

首先,我们在每个三角形中添加第4个点,使它们成为具有体积质心的四面体.我们计算质量的体积和中心,并将它们相互乘以得到我们的时刻.我们总结时刻并除以总体积来得到我们的整体质心.

每个四面体的质心仅为4个点的平均值.

这里的技巧是,由于创建STL文件的方式,三角形具有从零件表面向外指向的法线,遵循用于创建三角形的3个顶点的右手规则.我们可以通过允许我们使用一致的约定来确定是否应该从我们的网络部分添加或减去四面体的体积(这是因为我们选择的参考点可能不一定在部分内部)并且整个部分不一定是凸的,但它是一个封闭的物体).

使用确定方法计算体积,前三个坐标点将代表三角形的三个点.第四点是我们的共同起源.如果由三角形创建的法线(遵循右手规则从点1,2,3开始)指向我们的公共参考点,则该体积将被计算为不是我们整体实体或负体积的一部分(通过指向,我的意思是由三角形法线创建的矢量松散地指向与从我们的参考点到四面体的质心的矢量创建的法线平面相同的一侧.如果矢量指向远离参考点,则它是正体积或在部件内部.如果是正常的,则由于三角形与参考点位于同一平面,因此体积变为零.

我们不需要担心实际上跟踪任何这些,就好像我们的输入一致(因为三角形遵循右手规则,正常面向外部),确定将给我们正确的符号.

无论如何,继承人的代码(它比解释更简单).

class data // 3 vertices of each triangle

{

public:

float x1,y1,z1;

float x2,y2,z2;

float x3,y3,z3;

};

int main ()

{

int numTriangles; // pull in the STL file and determine number of triangles

data * triangles = new triangles [numTriangles];

// fill the triangles array with the data in the STL file

double totalVolume = 0, currentVolume;

double xCenter = 0, yCenter = 0, zCenter = 0;

for (int i = 0; i < numTriangles; i++)

{

totalVolume += currentVolume = (triangles[i].x1*triangles[i].y2*triangles[i].z3 - triangles[i].x1*triangles[i].y3*triangles[i].z2 - triangles[i].x2*triangles[i].y1*triangles[i].z3 + triangles[i].x2*triangles[i].y3*triangles[i].z1 + triangles[i].x3*triangles[i].y1*triangles[i].z2 - triangles[i].x3*triangles[i].y2*triangles[i].z1) / 6;

xCenter += ((triangles[i].x1 + triangles[i].x2 + triangles[i].x3) / 4) * currentVolume;

yCenter += ((triangles[i].y1 + triangles[i].y2 + triangles[i].y3) / 4) * currentVolume;

zCenter += ((triangles[i].z1 + triangles[i].z2 + triangles[i].z3) / 4) * currentVolume;

}

cout << endl << "Total Volume = " << totalVolume << endl;

cout << endl << "X center = " << xCenter/totalVolume << endl;

cout << endl << "Y center = " << yCenter/totalVolume << endl;

cout << endl << "Z center = " << zCenter/totalVolume << endl;

}

计算STL文件的质心非常快.

求一个矩形的质心c语言,c – 从.stl(立体光刻)文件计算质心的方法?相关推荐

  1. c++ 求四边形面积和周长_C++中运用类求一个矩形的面积和周长

    题目是这样的:/*定义一个矩形类Rectangle,包含:保护数据成员:doubleLength;//矩形的长doubleWidth;//矩形的宽公有成员函数:doubleArea();//计算矩形的 ...

  2. c语言流程图菱形代表什么_求一个输出菱形的c语言的流程图,“行”一个循环,然后把菱形分为上三角(四行的)和下三角(三行)...

    展开全部 学习C语言始终要记住"曙光在前头"和"千金难买回头e68a84e8a2ad62616964757a686964616f31333262376639看" ...

  3. 求一个整数的权重 c语言,Code Kata:大整数四则运算—乘法 javascript实现

    上周练习了加减法,今天练习大整数的乘法运算. 采取的方式同样为竖式计算,每一位相乘后相加. 乘法函数: 异符号相乘时结果为负数,0乘任何数都为0 需要调用加法函数 因为输入输出的为字符串,需要去除字符 ...

  4. MATLAB用递归法求解集合子集,用递归法求一个集合的子集c语言,急!!!

    匿名用户 1级 2014-04-09 回答 给你个参考代码: #include <stdio.h> #define ARRAY_SIZE 5 //输出Buffer集合 void Outpu ...

  5. c语言用队列stl加头文件,C++ STL List队列用法(实例)

    #include #include #include #include using namespace std; //创建一个list容器的实例LISTINT typedef listLISTINT; ...

  6. c语言定义全局变量stm32,STM32 多文件全局变量简单定义方法

    建立3个文件分别是 MainMap.h     SlaveMap.h    MainMap.h//=================================================== ...

  7. 零基础学 Go 语言(41):Go 读文件的七种方法

    查看本系列教程目录,请点击 零基础小白入门 Go语言 系列教程 Go 中对文件内容读写的方法,非常地多,其中大多数是基于 os 库的高级封装,不同的库,适用的场景又不太一样,为免新手在这块上裁跟头,我 ...

  8. 一个公司存在不同职位,不同职位计算工资的方法也不相同。工资可能是固定的,也可能根据销售额或工作量来计算。假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:

    *```java 标题一个公司通常都会存在着不同职位,而不同的职位计算工资的方法也是不相同的.工资可能是固定不变的,也可能是根据销售额或工作量来计算. 假设公司有三种职务:经理.计件工人和计时工人:他 ...

  9. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积

    /* 编写一个程序,从键盘读入一个矩形 的两个边的值(整数),求矩形面积. */ #include<stdio.h> void main() {int length,wide,area;p ...

最新文章

  1. 偏前端 - vue-cli(axios请求数据==》token+按接口参数顺序(参数值拼接base64)- MD5)...
  2. v7000更换电池步骤_v7000 gen1 电池更换问题
  3. 关于 Python3 的编码
  4. 深入学习Tomcat----自己动手写服务器(附服务器源码)
  5. git rebase(变基)—— Git 学习笔记 19
  6. 2440 nand flash和nor flash上启动
  7. Silverlight前景One World One Silverlight
  8. ArcGIS实验教程——实验二十七:时态数据可视化----以飓风路径为例
  9. python实现RSA算法,对数据进行加密认证
  10. 史上最全Redis总结,你想知道的都在这里啦
  11. 揭阳学计算机的好学校,揭阳初中排名2020最新排名,揭阳初中排名前十的学校有哪些...
  12. php中foreach()的用法
  13. 写出ch为英语字母的c语言表达式,变量英文,编程 变量 定义的英语
  14. Transformer模型简介
  15. 双击word文档提示向程序发送命令出现问题(There was a problem sending the command to the program)
  16. 世界知名游戏公司简介(国内,欧美,日韩)
  17. python回合制游戏教程_3. Molten从零开始做独立游戏-python学习
  18. 转载:使用pythonr脚本实现微信公众号音频批量下载
  19. REUSE_ALV_GRID_DISPLAY_LVC
  20. 学习如逆水行舟,只有坚持不断的学习,才能保持进步!我置顶了这些公众号

热门文章

  1. interprotscan安装与调试
  2. 【matlab】关于遗传算法工具箱GAOT 改成可设置的交叉概率和变异概率
  3. 发那可g10_FANUC系统宏程序配合G10指令倒角分析
  4. [20150911]关于增量检查点.txt
  5. Stata爬虫:爬取A股公司基本信息
  6. Git管理工具对比(GitBash、EGit、SourceTree)
  7. 【进一步学习HTML】
  8. 【HEC-RAS】入门基础案例练习-一维混合流水面线计算
  9. Mybatis-Plus——分页+模糊查询
  10. AD软件中,如何解决同一局域网下license冲突问题