查看: 2083|回复: 12

怎么求不规则三角网表面积

[复制链接]

该用户从未签到

发表于 2014-2-26 12:56:04 | 显示全部楼层 |阅读模式
求解啊!

该用户从未签到

发表于 2014-2-26 13:44:30 | 显示全部楼层
会算加法吗?

该用户从未签到

 楼主| 发表于 2014-2-26 13:59:51 | 显示全部楼层

手动一个一个算?

该用户从未签到

发表于 2014-2-27 10:30:18 | 显示全部楼层
不知道你所谓的三角网是什么个具体情况?
不管什么网你必须完成根据三个顶点计算三角形面积的算法。
单个三角形的通用计算方法,可以参考下面的代码:
   
   //已知顶点
    osg::Vec3 p1;osg::Vec3 p2;osg::Vec3 p3;
    //边向量
    osg::Vec3 vec1 = (*vertexs)[0] - (*vertexs)[1];
    osg::Vec3 vec2 = (*vertexs)[2] - (*vertexs)[1];
    //边长
    float b1 = vec1.length();vec1.normalize();
    float b2 = vec2.length();vec2.normalize();
    //两边夹角
    float angle = acos(vec1*vec2);
    //面积
    flaot area =  b1*sin(angle)*b2*0.5f;

1.如果你已经获得了三角图元的列表,设计个循环调用上述方法便可。
2.从你的描述“不规则三角网”,我揣测你仅知道三角网的边界顶点构成的多边形,不能保证是凸的。
这是需要你设计几个算法。
2.1 剔除凹陷区边界顶点,获得凸多边形边界。计算凸多边形面积。
2.2 获得凹陷区三角图元列表。计算凹陷区面积。
2.3 基本算法:判断多边形顶点是凸的还是凹的。
多边形的面积 = 凸多边形面积 - 凹陷区面积。

但愿你是第一种情况,不然有很多工作需要做奥。

如果你需要把凹多边形渲染出来,可采用osgUtil:elaunayTriangulator,加约束剔除实现!

该用户从未签到

发表于 2014-2-27 10:32:11 | 显示全部楼层
cenfer 发表于 2014-2-27 10:30
不知道你所谓的三角网是什么个具体情况?
不管什么网你必须完成根据三个顶点计算三角形面积的算法。
单个 ...

  改个错误! :L
    //已知顶点
    osg::Vec3 p1;osg::Vec3 p2;osg::Vec3 p3;
    //边向量
    osg::Vec3 vec1 = p2 - p1;
    osg::Vec3 vec2 = p3 - p1;

该用户从未签到

 楼主| 发表于 2014-2-27 15:15:43 | 显示全部楼层
cenfer 发表于 2014-2-27 10:32
改个错误!  
    //已知顶点
    osg::Vec3 p1;osg::Vec3 p2;osg::Vec3 p3;

我就是想问导出所有的三角图元,一个的面积也可以是海伦公式!

该用户从未签到

发表于 2014-2-27 15:58:54 | 显示全部楼层
本帖最后由 VR_user_happy 于 2014-2-27 16:05 编辑

遍历Geomtry的所有图元,不就得到了,不同的分类做不同的面积计算
查看Geomtry类函数
也可参看sgUtil::SmoothingVisitor::smooth中的作法

该用户从未签到

 楼主| 发表于 2014-3-3 17:42:57 | 显示全部楼层
VR_user_happy 发表于 2014-2-27 15:58
遍历Geomtry的所有图元,不就得到了,不同的分类做不同的面积计算
查看Geomtry类函数
也可参看sgUtil::Sm ...

TriangleFunctor 求的对LOD模型有效么?

该用户从未签到

发表于 2014-3-3 18:36:02 | 显示全部楼层
你可以参看LOD类, 如果不是imporster, PAGELOD下加载的同样是NODE节点,NODE 节点的几何体又何尝不是由几何图元组成的呢? 只是你在判别节点时对不同的节点类型区分对待,多做些判断而已!

该用户从未签到

发表于 2014-6-18 18:29:53 | 显示全部楼层
VR_user_happy 发表于 2014-2-27 15:58
遍历Geomtry的所有图元,不就得到了,不同的分类做不同的面积计算
查看Geomtry类函数
也可参看sgUtil::Sm ...

你好··请问如何才能遍历Geometry的所有图元?
我找了好多资料都没找到······

该用户从未签到

 楼主| 发表于 2014-6-19 10:01:58 | 显示全部楼层
tiandao011 发表于 2014-6-18 18:29
你好··请问如何才能遍历Geometry的所有图元?
我找了好多资料都没找到······

getNumPrimitiveSets()     然后自己循环啊。。。。。

该用户从未签到

发表于 2014-6-20 18:03:47 | 显示全部楼层
寻灿者 发表于 2014-6-19 10:01
getNumPrimitiveSets()     然后自己循环啊。。。。。

谢谢拉~~~~
我先看看Geometry.cpp里面是怎么用的~~~
不知道您有什么例子吗··关于遍历图元得到顶点的·····

该用户从未签到

 楼主| 发表于 2014-6-25 15:40:36 | 显示全部楼层
你查查和Visitor有关的例子呗。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表