벡터연산을 위한 클래스 구현(cpp)

학습로그/수학 2011. 2. 14. 11:40


벡터클래스  Vector3D.h

벡터클래스 테스트  Vector3DTest.cpp

#ifndef _VECTOR3D_H_

#define _VECTOR3D_H_

#define PI 3.14159265

class Vector3D {
        
public:
        float x, y, z;
public:
        Vector3D(float ex = 0, float why = 0, float zee = 0) {
                x = ex, y = why, z = zee;
        }
        
        ~Vector3D() {}
        // 벡터의 크기를 반환하는 메소드 
        float getMagnitude() {
                return sqrtf(x*x + y*y + z*z);
        }
        // 벡터의 스칼라 곱 
        Vector3D operator*(float num) const {
                return Vector3D(x*num, y*num, z*num);
        }
        // 벡터의 합 
        Vector3D operator+(const Vector3D &vec) const {
                return Vector3D(x + vec.x, y + vec.y, z + vec.z);
        }
        // 벡터의 차
        Vector3D operator-(const Vector3D &vec) const {
                return Vector3D(x - vec.x, y - vec.y, z - vec.z);
        }
        // 벡터의 정규화 
        void normalizeVector3D(void) {
                float mag = sqrtf(x*x + y*y + z*z);
                x /= mag;
                y /= mag;
                z /= mag;
        }
        // 벡터의 내적 
        float dotVector3D(const Vector3D &vec) const {
                return x*vec.x + y*vec.y + z*vec.z;
        }
        // 벡터의 외적
        Vector3D crossVector3D(const Vector3D &vec) const {
                return Vector3D(y*vec.z - z*vec.y, z*vec.x - x*vec.z, x*vec.y - y*vec.x);
        }
        // 내적을 이용해 두 벡터간의 각을 구함(단위: 도)
        float angleBetweenVector3Ds(Vector3D &vec)  {
                return (acos(dotVector3D(vec) / (getMagnitude() * vec.getMagnitude())) * (180 / PI));
        }
        
};

#endif

 

벡터 클래스의 사용

#include <iostream>
#include <cmath>
#include "Vector3D.h"

using namespace std;

int main()
{
        Vector3D A(5, 2, -3);
        Vector3D B(8, 1, -4);

        cout << "Vector A*B : " << A.dotVector3D(B) << endl;
        cout << "Vector A magnitude: " << A.getMagnitude() << endl;
        cout << "Vector B mgaginute: " << B.getMagnitude() << endl;
        cout << "angle between two vectors: " << A.angleBetweenVector3Ds(B) << endl;
        
        Vector3D C = A.crossVector3D(B);        
        C.normalizeVector3D();
        
        cout << "nomalized vector: " << C.x << "i " << C.y << "j " << C.z << "k" << endl;
        
        return 0;
}

 

 

 

 




이 글은 스프링노트에서 작성되었습니다.

'학습로그 > 수학' 카테고리의 다른 글

일반각과 호도법  (0) 2011.02.14
삼각함수의 성질  (0) 2011.02.14
삼각함수  (0) 2011.02.14
벡터연산을 위한 클래스 구현(cpp)  (0) 2011.02.14
벡터 연산(Vector Operations)  (0) 2011.02.14
수학 교과과정 (초등학교~고등학교)  (0) 2011.02.13