栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ vector4实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ vector4实现

前言

这篇文章在上一篇C++ 实现Vector3的基础之上,添加了第四分量w,并实现了Vector4的相关操作。

有关Vector4的参数、函数、运算操作符参考于微软文档:
微软Vector4

经main函数测试,可以运行通过。

main

随便在main中测试了几个方法…

测试结果

头文件代码
#ifndef _VECTOR4_H_
#define _VECTOR4_H_

#include 
using namespace std;

class vector4
{
private:
    

public:
    float w; //	The W component of the vector.
    float x; // The X component of the vector.
    float y; // The Y component of the vector.
    float z; // The Z component of the vector.

    vector4();
    vector4(float x, float y, float z, float w); // Creates a vector whose elements have the specified values.
    ~vector4();

    static vector4 One;   // Gets a vector whose 3 elements are equal to one.
    static vector4 UnitX; // Gets the vector (1,0,0,0).
    static vector4 UnitY; // Gets the vector (0,1,0,0).
    static vector4 UnitZ; // Gets the vector (0,0,1,0).
    static vector4 UnitW; // Gets the vector (0,0,0,1).
    static vector4 Zero;  // Gets a vector whose 4 elements are equal to zero.
    static vector4 Abs(vector4 value);                            // Returns a vector whose elements are the absolute values of each of the specified vector's elements.
    static vector4 Add(vector4 left, vector4 right);              // Adds two vectors together.
    static float Distance(vector4 value1, vector4 value2);        // Computes the Euclidean distance between the two given points.
    static float DistanceSquared(vector4 value1, vector4 value2); // Returns the Euclidean distance squared between two specified points.
    static vector4 Divide(vector4 left, float divisor);           // Divides the specified vector by a specified scalar value.
    static vector4 Divide(vector4 left, vector4 right);           // Divides the first vector by the second.
    static float Dot(vector4 vector1, vector4 vector2);           // Returns the dot product of two vectors.
    const float Length(vector4 left);                             // Returns the length of this vector object.
    const float LengthSquared(vector4 left);                      // Returns the length of the vector squared.
    static vector4 Multiply(float left, vector4 right);           // Multiplies a scalar value by a specified vector.
    static vector4 Multiply(vector4 left, float right);           // Multiplies a vector by a specified scalar.
    static vector4 Negate(vector4 value);                         // Negates a specified vector.
    static vector4 Normalize(vector4 value);                      // Returns a vector with the same direction as the specified vector, but with a length of one.
    static vector4 Subtract(vector4 left, vector4 right);         // Subtracts the second vector from the first.
};

static vector4 operator+(vector4 left, vector4 right);  // Adds two vectors together.
static vector4 operator/(vector4 value1, float value2); // Divides the specified vector by a specified scalar value.
static vector4 operator/(vector4 left, vector4 right);  // Divides the first vector by the second.
static bool operator==(vector4 left, vector4 right);    // Returns a value that indicates whether each pair of elements in two specified vectors is equal.
static bool operator!=(vector4 left, vector4 right);    // Returns a value that indicates whether two specified vectors are not equal.
static vector4 operator*(float left, vector4 right);    // Multiples the scalar value by the specified vector.
static vector4 operator*(vector4 left, float right);    // Multiples the specified vector by the specified scalar value.
static vector4 operator*(vector4 left, vector4 right);  // Returns a new vector whose values are the product of each pair of elements in two specified vectors.
static vector4 operator-(vector4 left, vector4 right);  // Subtracts the second vector from the first.
static vector4 operator-(vector4 value);                // Negates the specified vector.
#endif
cpp代码
#include "Vector4.h"
#include 
using namespace std;
// 实现vector类的构造函数
vector4::vector4() : x(0), y(0), z(0), w(0) {}
vector4::vector4(float x, float y, float z, float w) : x(x), y(y), z(z), w(w) {}
vector4::~vector4() {}
// 实现vector类的参数
vector4 vector4::One = vector4(1, 1, 1, 1);
vector4 vector4::UnitX = vector4(1, 0, 0, 0);
vector4 vector4::UnitY = vector4(0, 1, 0, 0);
vector4 vector4::UnitZ = vector4(0, 0, 1, 0);
vector4 vector4::UnitW = vector4(0, 0, 0, 1);
vector4 vector4::Zero = vector4(0, 0, 0, 0);
// 实现vector类的函数
vector4 vector4::Abs(vector4 value)
{
    return vector4(fabsf(value.x), fabsf(value.y), fabsf(value.z), fabsf(value.w));
}
vector4 vector4::Add(vector4 left, vector4 right)
{
    return vector4(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w);
}
float vector4::Distance(vector4 value1, vector4 value2)
{
    float x = value1.x - value2.x;
    float y = value1.y - value2.y;
    float z = value1.z - value2.z;
    float w = value1.w - value2.w;
    return sqrt(x * x + y * y + z * z + w * w);
}
float vector4::DistanceSquared(vector4 value1, vector4 value2)
{
    float x = value1.x - value2.x;
    float y = value1.y - value2.y;
    float z = value1.z - value2.z;
    float w = value1.w - value2.w;
    return x * x + y * y + z * z + w * w;
}
vector4 vector4::Divide(vector4 left, float divisor)
{
    return vector4(left.x / divisor, left.y / divisor, left.z / divisor, left.w / divisor);
}
vector4 vector4::Divide(vector4 left, vector4 right)
{
    return vector4(left.x / right.x, left.y / right.y, left.z / right.z, left.w / right.w);
}
float vector4::Dot(vector4 vector1, vector4 vector2)
{
    return vector1.x * vector2.x + vector1.y * vector2.y + vector1.z * vector2.z + vector1.w * vector2.w;
}
const float vector4::Length(vector4 left)
{
    return sqrt(left.x * left.x + left.y * left.y + left.z * left.z + left.w * left.w);
}
const float vector4::LengthSquared(vector4 left)
{
    return left.x * left.x + left.y * left.y + left.z * left.z + left.w * left.w;
}
vector4 vector4::Multiply(float left, vector4 right)
{
    return vector4(right.x * left, right.y * left, right.z * left, right.w * left);
}
vector4 vector4::Multiply(vector4 left, float right)
{
    return vector4(right * left.x, right * left.y, right * left.z, right * left.w);
}
vector4 vector4::Negate(vector4 value)
{
    return vector4(-value.x, -value.y, -value.z, -value.w);
}
vector4 vector4::Normalize(vector4 value)
{
    float len = value.Length(value);
    return vector4(value.x / len, value.y / len, value.z / len, value.w / len);
}
vector4 vector4::Subtract(vector4 left, vector4 right)
{
    return vector4(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w);
}
// 实现运算符
vector4 operator+(vector4 left, vector4 right)
{
    return vector4(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w);
}
vector4 operator/(vector4 left, float divisor)
{
    return vector4(left.x / divisor, left.y / divisor, left.z / divisor, left.w / divisor);
}
vector4 operator/(vector4 left, vector4 right)
{
    return vector4(left.x / right.x, left.y / right.y, left.z / right.z, left.w / right.w);
}
bool operator==(vector4 left, vector4 right)
{
    return (left.x == right.x && left.y == right.y && left.z == right.z && left.w == right.w);
}
bool operator!=(vector4 left, vector4 right)
{
    return (left.x != right.x || left.y != right.y || left.z != right.z || left.w != right.w);
}
vector4 operator*(float left, vector4 right)
{
    return vector4(right.x * left, right.y * left, right.z * left, right.w * left);
}
vector4 operator*(vector4 left, float right)
{
    return vector4(right * left.x, right * left.y, right * left.z, right * left.w);
}
vector4 operator*(vector4 left, vector4 right)
{
    return vector4(left.x * right.x, left.y * right.y, left.z * right.z, left.w * right.w);
}
vector4 operator-(vector4 left, vector4 right)
{
    return vector4(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w);
}
vector4 operator-(vector4 value)
{
    return vector4(-value.x, -value.y, -value.z, -value.w);
}
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号