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

📄 vect3.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: vect3.hpp,v $ * PRODUCTION Revision 1000.2  2004/06/01 19:49:07  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6 * PRODUCTION * =========================================================================== */#ifndef GUI_MATH___VECT3___HPP#define GUI_MATH___VECT3___HPP/*  $Id: vect3.hpp,v 1000.2 2004/06/01 19:49:07 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software / database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software / database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Mike DiCuccio * * File Description: * */#include <corelib/ncbistd.hpp>#include <gui/math/math.hpp>/** @addtogroup GUI_MATH * * @{ */BEGIN_NCBI_SCOPEtemplate <class T>class CVect3{public:     // interface    // ctors    CVect3();    explicit CVect3(T val);    explicit CVect3(T, T, T);    //    //  operators    // operator: indexing    const T&    operator[] (int i) const    { return m_Xyz[i]; }    T&          operator[] (int i)      { return m_Xyz[i]; }    // operators: math    CVect3<T>&  operator+= (T);    CVect3<T>&  operator+= (const CVect3<T>&);    CVect3<T>&  operator-= (T);    CVect3<T>&  operator-= (const CVect3<T>&);    CVect3<T>&  operator*= (T);    CVect3<T>&  operator*= (const CVect3<T>&);   // cross product!    CVect3<T>&  operator/= (T);    CVect3<T>&  operator/= (const CVect3<T>&);    //    // named functions    // return length of vector    float       Length() const;    // return length of vector squared    float       Length2() const;    // return true if the length of the vector is 0    bool        Vanishing() const;    // normalize a vector    void        Normalize();    // return a unit vector in the direction of the current vector    CVect3<T>   Direction() const;    // test whether a passed vector is parallel or normal to current    bool        Parallel(const CVect3<T>&) const;    bool        Normal(const CVect3<T>&) const;    // perform dot product    T           Dot(const CVect3<T>&) const;    // perform cross product(same as operator*=)    CVect3<T>   Cross(const CVect3<T>&) const;    // accessor functions    T&          X()         { return m_Xyz[0]; }    const T&    X() const   { return m_Xyz[0]; }    T&          Y()         { return m_Xyz[1]; }    const T&    Y() const   { return m_Xyz[1]; }    T&          Z()         { return m_Xyz[2]; }    const T&    Z() const   { return m_Xyz[2]; }    const T*    GetData() const    { return m_Xyz; }private:    T m_Xyz[3];};END_NCBI_SCOPE//// global operations// this is included after the class declaration#include <gui/math/globals.hpp>BEGIN_NCBI_SCOPE//// default ctor//template <class T> inlineCVect3<T>::CVect3(){    m_Xyz[0] = m_Xyz[1] = m_Xyz[2] = (T)0;}//// conversion ctors//template <class T> inlineCVect3<T>::CVect3 (T val){    m_Xyz[0] = m_Xyz[1] = m_Xyz[2] = val;}template <class T> inlineCVect3<T>::CVect3 (T x, T y, T z){    m_Xyz[0] = x;    m_Xyz[1] = y;    m_Xyz[2] = z;}//// operator+ (scalar)//template <class T> inline CVect3<T>&CVect3<T>::operator+= (T scalar){    X() += scalar;    Y() += scalar;    Z() += scalar;    return *this;}//// operator+ (vector)//template <class T> inline CVect3<T>&CVect3<T>::operator+= (const CVect3<T>& v){    X() += v.X();    Y() += v.Y();    Z() += v.Z();    return *this;}//// operator- (scalar)//template <class T> inline CVect3<T>&CVect3<T>::operator-= (T scalar){    X() -= scalar;    Y() -= scalar;    Z() -= scalar;    return *this;}//// operator- (vector)//template <class T> inline CVect3<T>&CVect3<T>::operator-= (const CVect3<T>& v){    X() -= v.X();    Y() -= v.Y();    Z() -= v.Z();    return *this;}//// operator*= (scalar)//template <class T> inline CVect3<T>&CVect3<T>::operator*= (T scalar){    X() *= scalar;    Y() *= scalar;    Z() *= scalar;    return *this;}//// operator* (vector)//     (cross product!!!)//template <class T> inline CVect3<T>&CVect3<T>::operator*= (const CVect3<T>& v){    *this = Cross(v);    return *this;}//// dot(vector)//template <class T> inline TCVect3<T>::Dot(const CVect3<T>& v) const{    return (T)(X() * v.X() + Y() * v.Y() + Z() * v.Z());}//// cross()//     cross product; same as operator*= except no assignment//template <class T> inline CVect3<T>CVect3<T>::Cross(const CVect3<T>& v) const{    // cross product is as follows:    //     //     a x b = <a_2 * b_3 - a_3 * b_2, -(a_1 * b_3 - a_3 * b_1), a_1 * b_2 - a_2 * b_1>    //    return CVect3<T> (  Y() * v.Z() - Z() * v.Y(),                          -(X() * v.Z() - Z() * v.X()),                          X() * v.Y() - Y() * v.X());}//// operator/= (scalar)//template <class T> inline CVect3<T>&CVect3<T>::operator/= (T scalar){    scalar = T(1) / scalar;    X() *= scalar;    Y() *= scalar;    Z() *= scalar;    return *this;}//// length()//     return the length of a vector//template <class T> inline floatCVect3<T>::Length() const{    return ::sqrt(Length2());}template <class T> inline floatCVect3<T>::Length2() const{    return (X() * X() + Y() * Y() + Z() * Z());}template <class T> inline boolCVect3<T>::Vanishing() const{    return (Length2() == 0.0);}//// normalize()//     converts a vector to a unit vector//template <class T> inline voidCVect3<T>::Normalize(){    typedef NCBI_PROMOTE(T, float) TFloat;    TFloat f = TFloat(1) / TFloat(Length());    if (f != TFloat(0)) {        X() = (X() * f);        Y() = (Y() * f);        Z() = (Z() * f);    }}//// direction()//     returns a unit vector in the direction of the current vector//template <class T> inline CVect3<T>CVect3<T>::Direction() const{    return CVect3<T>(*this, true);}//// parallel()//     tests to see whether the passed vector is parallel to the current vector//template <class T> inline boolCVect3<T>::Parallel(const CVect3<T>& v) const{    typedef NCBI_PROMOTE(T, float) TFloat;    TFloat result = (TFloat)Dot(v);    TFloat l = Length() * v.Length();    if (result == l  ||  result == -l) {        return true;    }    return false;}//// normal()//     tests to see whether the passed vector is nromal to the current vector//template <class T> inline boolCVect3<T>::Normal(const CVect3<T>& v) const{    typedef NCBI_PROMOTE(T, float) TFloat;    TFloat result = (TFloat)Dot(v);    if (result == TFloat(0)  &&        Length() != TFloat(0)  &&        v.Length() != TFloat(0)) {        return true;    }    return false;}END_NCBI_SCOPE/* @} *//* * =========================================================================== * $Log: vect3.hpp,v $ * Revision 1000.2  2004/06/01 19:49:07  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6 * * Revision 1.6  2004/05/11 18:53:50  dicuccio * Added doxygen modules info * * Revision 1.5  2004/05/03 13:10:01  dicuccio * Removed gui/gui.hpp --> not necessary for math projects * * Revision 1.4  2004/05/03 12:43:35  dicuccio * Added #include for gui/gui.hpp * * Revision 1.3  2004/03/11 17:16:56  dicuccio * FIxed include guards.  Fixed use of dead functions (upper case first letter) * * Revision 1.2  2003/12/22 19:14:21  dicuccio * Fixed lots of bugs in referencing non-existent functions * * Revision 1.1  2003/06/09 19:30:50  dicuccio * Initial revision * * =========================================================================== */#endif // GUI_MATH___VECT3___HPP

⌨️ 快捷键说明

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