C 實現乙個Vector3空間向量類

2021-08-27 15:41:11 字數 2079 閱讀 5310

vector2,3,4類在directx中都有現成的可以呼叫,不過要實現其中的功能其實也不難,也都是一些簡單的數學知識罷了。

1 + - * /算術運算

2 向量的數量積,又叫:點乘

3 向量的向量積,又叫:叉乘

4 向量單位化(normalization)

#pragma once

extern const double uzero;

class vector3

vector3(float x1, float y1, float z1):x(x1), y(y1), z(z1){}

vector3(const vector3 &v);

~vector3();

void operator=(const vector3 &v);

vector3 operator+(const vector3 &v);

vector3 operator-(const vector3 &v);

vector3 operator/(const vector3 &v);

vector3 operator*(const vector3 &v);

vector3 operator+(float f);

vector3 operator-(float f);

vector3 operator/(float f);

vector3 operator*(float f);

float dot(const vector3 &v);

float length();

void normalize();

vector3 crossproduct(const vector3 &v);

void printvec3();

};

#include"plane.h"

#includeconst double uzero = 1e-6;

//複製建構函式,必須為常量引用引數,否則編譯不通過

vector3::vector3(const vector3 &v):x(v.x), y(v.y), z(v.z)

vector3::~vector3()

void vector3::operator=(const vector3 &v)

vector3 vector3::operator+(const vector3 &v)

vector3 vector3::operator-(const vector3 &v)

vector3 vector3::operator/(const vector3 &v)

return vector3(x/v.x, y/v.y, z/v.z);

}vector3 vector3::operator*(const vector3 &v)

vector3 vector3::operator+(float f)

vector3 vector3::operator-(float f)

vector3 vector3::operator/(float f)

return vector3(x/f, y/f, z/f);

}vector3 vector3::operator*(float f)

float vector3::dot(const vector3 &v)

float vector3::length()

void vector3::normalize()

/*cross product叉乘公式

axb = | i, j, k |

| a.x a.y a.z|

| b.x b.y b.z| = (a.x*b.z -a.z*b.y)i + (a.z*b.x - a.x*b.z)j + (a.x+b.y - a.y*b.x)k

*/vector3 vector3::crossproduct(const vector3 &v)

void vector3::printvec3()

運算結果:

實現乙個STL的vector容器

封裝了vector的資料結構,和push back capacity size 方法,內嵌了iterator迭代器類 include include using namespace std namespace ministl vector 拷貝建構函式 賦值運算子過載函式 void push bac...

用vector實現乙個變長陣列

所謂陣列,有這樣的性質 c語言中的陣列,一旦長度定義,就不能改變。有時候需要動態增加陣列長度,而且想保留上述性質,這時候就可以用vector。vector模擬了c語言中陣列的操作,比如取值,下標越界未定義等。最重要的,它支援size 和resize 方法,可以獲得陣列長度,以及擴充套件陣列長度。這樣...

C語言實現乙個泛型的vector

使用純 c 語言實現乙個泛型的 vector 支援拷貝構造和移動構造。vector 是動態的陣列,因此我們儲存 vector 申請的記憶體塊的指標,此外我們需要兩個 size t 型別的數儲存當前開闢的空間和當前已經存有的元素個數。故需要乙個我們定義以下的 vector 結構體 struct vec...