검색결과 리스트
글
벡터연산을 위한 클래스 구현(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 |