⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 line.h

📁 奇迹世界公用文件源代码,研究网络游戏的朋友可以研究下
💻 H
字号:
#ifndef N_LINE_H
#define N_LINE_H
//------------------------------------------------------------------------------
/**
    a line in 2d space
    @author
    - RadonLabs GmbH 
    @since
    - 2005.7.06
    @remarks
    - 瘤肯 眠啊 
*/
#include "vector.h"

//-------------------------------------------------------------------
class line2 {
public:
    vector2 b;
    vector2 m;

    line2() {};
    line2(const vector2& v0, const vector2& v1) : b(v0), m(v1-v0) {};
    line2(const line2& l) : b(l.b), m(l.m) {};

    //--- minimal distance of point to line -------------------------
/*
    float distance(const vector2&)
    {
        return 0.0f;
    };
*/

    const vector2& start(void) const
    {
        return b;
    };
    vector2 end(void) const
    {
        return (b+m);
    };
    float len(void) const
    {
        return m.len();
    };
    //--- get 3d point on line given t ------------------------------
    vector2 ipol(const float t) const
    {
        return vector2(b + m*t);
    };
};

/**
    @class line3
    @ingroup NebulaMathDataTypes

    a line in 3d space

     - 04-Dec-01   floh    bugfix: line3::len() was broken
*/
//-------------------------------------------------------------------
class line3 {
public:
    vector3 b;
    vector3 m;

    line3() {};
    line3(const vector3& v0, const vector3& v1) : b(v0), m(v1-v0) {};
    line3(const line3& l) : b(l.b), m(l.m) {};

    void set(const vector3& v0, const vector3& v1)
    {
        b = v0;
        m = v1-v0;
    };
    const vector3& start(void) const
    {
        return b;
    };
    vector3 end(void) const
    {
        return (b+m);
    };
    float len(void) const
    {
        return m.len();
    };
    float len_squared(void) const
    {
        return m.lensquared();
    }
    //--- minimal distance of point to line -------------------------
    float distance(const vector3& p) {
        vector3 diff(p-b);
        float l = (m % m);
        if (l > 0.0f) {
            float t = (m % diff) / l;
            diff = diff - m*t;
            return diff.len();
        } else {
            // line is really a point...
            vector3 v(p-b);
            return v.len();
        }
    };

    //--- get 3d point on line given t ------------------------------
    vector3 ipol(const float t) const
    {
        return vector3(b + m*t);
    };
};
//-------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -