向量類的實現

來源:互聯網
上載者:User

向量在實現圖形學的演算法中有很重要的位置 ,下面是 用C++寫的一個向量類,實現了一些 基本的 向量操作。

代碼清單:

gvector3.h

#ifndef GVECTOR3_H#define GVECTOR3_H#include <iostream>#include <cmath>using namespace std;class GVector3{public:    float x;    float y;    float z;     // 預設建構函式    GVector3();    ~GVector3();     // 使用者建構函式    GVector3(float posX, float posY, float posZ);    //輸出向量資訊    void getInfo();    //向量加法    GVector3 operator+(GVector3 v);    //向量減法    GVector3 operator-(GVector3 v);    //數乘    GVector3 operator*(float n);    //數除    GVector3 operator/(float n);    //向量點積    float dotMul(GVector3 v2);    //向量叉乘    GVector3 crossMul(GVector3 v2);    //擷取向量長度    float getLength();    //向量單位化    void Normalize();};#endif // GVECTOR3_H

gvector.cpp

#include "gvector3.h"GVector3::GVector3(){}GVector3::~GVector3(){}GVector3::GVector3(float posX, float posY, float posZ){    x=posX;    y=posY;    z=posZ;}GVector3 GVector3::operator+(GVector3 v){    return GVector3(x+v.x,v.y+y,v.z+z);}GVector3 GVector3::operator-(GVector3 v){    return GVector3(x-v.x,y-v.y,z-v.z);}GVector3 GVector3::operator*(float n){    return GVector3(x*n,y*n,z*n);}GVector3 GVector3::operator/(float n){    return GVector3(x/n,y/n,z/n);}void GVector3::getInfo(){    cout<<"x:"<<x<<" y:"<<y<<" z:"<<z<<endl;}float GVector3::dotMul(GVector3 v2){    return (x*v2.x+y*v2.y+z*v2.z);}GVector3 GVector3::crossMul(GVector3 v2){ GVector3 vNormal;  // 計算垂直向量  vNormal.x = ((y * v2.z) - (z * v2.y));  vNormal.y = ((z * v2.x) - (x * v2.z));  vNormal.z = ((x * v2.y) - (y * v2.x));  return vNormal;}float GVector3::getLength(){    return  (float)sqrt(x*x+y*y+z*z);}void GVector3::Normalize(){    float length=getLength();    x=x/length;    y=y/length;    z=z/length;}

測試檔案:

#include <iostream>#include "gvector3.h"using namespace std;int main(){    GVector3 v1,v2,v3;    v1=GVector3(1.0,2.0,5.0);    v2=GVector3(3.0,1.0,6.0);    v1=v1-v2;    v1.getInfo();    v2=v2/2;    v2.getInfo();    v3=v1.crossMul(v2);    v3.getInfo();    float a=v1.dotMul(v2);    cout<<"v1 dotMul v2:"<<a<<endl;    cout<<"v3.Length:"<<v3.getLength()<<endl;    v3.Normalize();    cout<<"v3 After nomarlize:"<<endl;    v3.getInfo();    cout << "Hello world!" << endl;    return 0;}


注意編譯命令是:g++  main.cpp gvector3.h gvector3.cpp -o 1

運行結果:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.