// 根据线上的起点和终点pt0,pt1,计算形成的圆柱体的顶点和法线数组

void computeCylinderVertexs(osg::Vec3d pt0, osg::Vec3d pt1, double radius, osg::Vec3dArray* vts, osg::Vec3Array* nors)
{    
    osg::Vec3d dir = pt0 - pt1;
    dir.normalize();

// 计算平面(pt0,dir)上的一点ptPlane, (pt0,ptPlane)矢量planeDir与dir垂直    
    double xx,yy,zz;
    if (fabs(dir.z()) > 0.001)
    {
        xx = pt0.x() + 10;
        yy = pt0.y();
        zz = -(dir.x()*(xx-pt0.x())+dir.y()*(yy-pt0.y()))/dir.z() + pt0.z();
    }
    else if (dir.x() != 0)
    {
        yy = pt0.y() + 10;
        zz = pt0.z();
        xx = -(dir.y()*(yy-pt0.y())+dir.z()*(zz-pt0.z()))/dir.x() + pt0.x();
    }
    else
    {
        xx = pt0.x() +10;
        zz = pt0.z();
        yy = -(dir.x()*(xx-pt0.x())+dir.z()*(zz-pt0.z()))/dir.y() + pt0.y();
    }
    osg::Vec3d planeDir(xx-pt0.x(),yy-pt0.y(),zz-pt0.z());
    planeDir.normalize();
    // 按一定弧度实现矢量planeDir绕dir旋转得到矢量A
    osg::Matrixd mt;
    int edges = 18; //360/20
    for (int k = 0; k < edges; k++)
    {
        mt.makeRotate(osg::DegreesToRadians(k*360.0/edges),dir);

osg::Vec3d newrotDir = planeDir * mt;
        newrotDir.normalize();
        osg::Vec3d newPt0 = pt0 + newrotDir * radius; // 上顶面顶点
        osg::Vec3d newPt1 = pt1 + newrotDir * radius; // 下底面顶点
        
        osg::Vec3d nor0 = newPt0-pt0;
        nor0.normalize();
    
        vts->push_back(newPt0);
        nors->push_back(nor0);
        vts->push_back(newPt1);        
        nors->push_back(nor0);
    }

vts->push_back(vts->at(0));
    nors->push_back(nors->at(0));
    vts->push_back(vts->at(1));
    nors->push_back(nors->at(1));
}

根据空间线上的两点生成圆柱体 算法相关推荐

  1. 射影几何----二阶曲线可由曲线上任意两点生成画法

  2. 线上房源推荐在房地产行业的应用实践

    采用协同过滤,进行客户线上房源的推荐,算法的核心是根据用户-物品矩阵,进行交叉推荐,其目的根据客户行为的数据,把客户最感兴趣但未访问过的房源推荐给客户. 1.1     ALS算法原理 注:参考文献: ...

  3. 百度单测生成技术如何召回线上服务的异常问题?

    导读:线上系统异常问题一直以来都是使人"闻风丧胆"的,传统手段在解决这类问题时面临着相应的技术瓶颈.基于此,探索基于单元测试召回异常问题的方法,实现了一套通用且无人参与的单测生成系 ...

  4. 如何注册免费的服务器和域名?如何将自己的项目部署到免费的服务器上并生成线上地址?

    目录 一.搜索 "免费空间" 二.注册 三.激活FTP 四.下载8UFTP软件 五.上传项目 六.浏览网址 我们将项目写好之后,总是要部署上线的,然而购买服务器和域名当然是要花钱的 ...

  5. 基于python和线上网站wordart的词云生成

    词云生成 前言 一.词云是什么? 二.使用步骤 1.使用jieba提取关键词 2.进入网站 3.导入关键词 4.导入字体 5.生成词云 6.词云调整 总结 前言 随着人工智能的不断发展,python这 ...

  6. 文献阅读_基于线上评论的区域消费环境放心度与空间特征研究(中文文献)

    文献来源:李栋,李爽,范宇鹏.基于线上评论的区域消费环境放心度与空间特征研究[J].统计与信息论坛,2021,36(04):118-128. 基于线上评论的区域消费环境放心度与空间特征研究 行文架构 ...

  7. ITextRenderer.createPDF 生成的PDF在本地和线上的pdf大小不一样的问题

    问题描述:因为需求需要把一个html生成的PDF拼接到另一个PDF,因为拼接所以表格的线那些必须对准,本地测试的时候对准了!但到线上却出现了错位!html生成的PDF里面的表格比另一个PDF大了许多. ...

  8. 计算机网络空间安全大赛报道,网络空间安全学院成功举办第十三届全国大学生信息安全竞赛线上宣讲会...

    3月28日晚,网络空间安全学院召开2020年第十三届全国大学生信息安全竞赛宣讲会.本次线上宣讲会由学院副院长刘志强指导,张慧翔和邰瑜组织.网络空间安全学院.自动化学院.计算机学院.软件学院等约70名本 ...

  9. C++: 有限元法 (FEM) 应用于线性两点 一个空间维度上的边界值问题 (附完整源码)

    C++: 有限元法 (FEM) 应用于线性两点 一个空间维度上的边界值问题 # include <cstdlib> # include <iostream> # include ...

最新文章

  1. UVa10911 Forming Quiz Teams(dp)
  2. 80后应该面对的问题
  3. 古希腊三大数学书(二)
  4. 查看linux文件系统结构,linux的文件系统架构
  5. oracle之单行函数之多表查询
  6. .net连接MYSQL数据库方法一
  7. Hooks中的useState
  8. 【转载】关系型数据库设计范式
  9. JAVA Pattern和Matcher 的用法
  10. 打线上包 测试_vue-cli项目分别打测试包(test)和生产包(prod)
  11. About abstract class.
  12. 移位和位运算相关算法题学习积累
  13. head 查看文件前n行
  14. 聊聊高并发系统之限流特技(一)作者:张开涛
  15. 三星或将80%手机生产转至越南
  16. 一份关于webpack2和模块打包的新手指南(一)
  17. Arduino使用433MHz RF射频发射器和接收器的方法
  18. 深度学习理论与技术的重点研究方向
  19. python头像教程_教你用 Python 生成一张全体微信好友的头像墙
  20. 高通SDX12:Keypad按键相关(PowerKey、Reset)

热门文章

  1. Dynamips与VMware配合搭建网络实验环境
  2. Redis API的原子性分析
  3. 【思维导图】redis
  4. MySQL删除匿名用户,保证登录安全
  5. TMG标准版轻松升级到企业版---TMG 2010 系列之四
  6. 苹果大战FBI将加速科技圈的加密技术发展?
  7. 解决MySQL自动断开连接的问题
  8. 拼接多个 wchar_t *
  9. Spring 事务之@Transactional
  10. [翻译]StructureMap 指南 – .NET中的依赖注入和控制反转