• 轨迹的完整定义


    写成这样了...

    typedef enum LocusType
    {
        LT_LINEAR 
    = 0,
        LT_B_SPLINE,
        LT_STEP,
    }
    LocusType;

    class LocusBase
    {
    public:
        
    int m_time;
    protected:
        LocusBase(LocusType type);
        
    const LocusType mc_type;
        
    }
    ;

    template
    < class Point >
    class Locus : public LocusBase// 轨迹
    {
    public:
        Locus(LocusType type);
        
    struct Node
        
    {
            Node():m_time(
    0), m_p()
            
    {
            }

            Node(
    const Node &n):m_time(n.m_time), m_p(n.m_p)
            
    {
            }

            Node(
    int time, Point &p):m_time(time), m_p(p)
            
    {
            }

            
    int m_time;
            Point m_p;
            
    bool operator < (int time) const
            
    {
                
    return m_time < time;
            }

        }
    ;
        
    void loadData(const char *data);
        
    virtual int getInterval(int time, Point &result) = 0;
        ::std::vector
    < Node > m_data;
    }
    ;

    /// LocusLinear 
    /// @note 线性插值轨迹

    template< class Point >
    class LocusLinear : public Locus< Point > 
    {
    public:
        LocusLinear();
        
    int getInterval(int time, Point &result);
    }
    ;

    /// LocusBspline
    /// @note B样条曲线插值轨迹

    template< class Point >
    class LocusBspline : public Locus< Point > 
    {
    public:
        LocusBspline();
        
    int getInterval(int time, Point &result);
    }
    ;

    /// LocusStep
    /// @note 位置直接跳变的轨迹
    template< class Point >
    class LocusStep : public Locus< Point > 
    {
    public:
        LocusStep();
        
    int getInterval(int time, Point &result);
    }
    ;

    效果:
    https://files.cnblogs.com/kaikai/locus.rar

    数据随机生成:
        srand(timeGetTime());
        Clip clip;
        LocusBspline2d locus;
        LocusLinear2d locusZoom;
        LocusLinear1d locusRot;
        clip.pFace 
    = &ims;
        
    struct DATA{
            
    int time;
            
    int type;
            
    int size;
            Locus2d::Node node[LOCUS_MAX_NODE_COUNT];
        }
     data, zoom;
        data.time 
    = 1000;
        data.type 
    = LT_B_SPLINE,
        data.size 
    = 10;
        zoom.time 
    = 1000;
        zoom.type 
    = LT_LINEAR,
        zoom.size 
    = 10;
        
    struct DATA2{
            
    int time;
            
    int type;
            
    int size;
            Locus1d::Node node[LOCUS_MAX_NODE_COUNT];
        }
     rot;
        rot.time 
    = 1000;
        rot.type 
    = LT_LINEAR,
        rot.size 
    = 10;
        
    for (i = 0; i<10; i++)
        
    {
            data.node[i] 
    = Locus2d::Node(i*100, Point2d(rand()%640,rand()%480));
            zoom.node[i] 
    = Locus2d::Node(i*100, Point2d(rand()%100/50.f,rand()%100/50.f));
            rot.node[i].m_time 
    = i*100;
            rot.node[i].m_p 
    = rand()%360;
        }

        locus.loadData((
    const char *)&data);
        locusZoom.loadData((
    const char *)&zoom);
        locusRot.loadData((
    const char *)&rot);
        Anim ani(clip, 
    &locus, &locusZoom, &locusRot);
  • 相关阅读:
    后台架构设计—数据存储层
    Linux应用程序基础
    Linux文件管理命令笔记
    CentOS7搭建LAMP实战
    (ospf、rip、isis、EIGRP)常见的动态路由协议简介
    python while 循环语句
    获取linux帮助命令
    破解linux虚拟机的密码
    gawk编程语言
    MySQL触发器在PHP项目中用来做信息备份、恢复和清空的方法介绍
  • 原文地址:https://www.cnblogs.com/kaikai/p/74132.html
Copyright © 2020-2023  润新知