大家一定要先看书,在看我的随笔啊。不然不知道原理的。而且我是不写教程的,只是写笔记怕自己忘记了。
我把所有的基础类放在了名叫geometry的文件中,包含Vector3, Normal3, Point3, Point2等
类声明:
#include "../../Types.h" class Point3; class Normal3; class Matrix; class Vector3 { public: Vector3(); ~Vector3(); Vector3(ldouble a); Vector3(ldouble a, ldouble b, ldouble c); Vector3(const Vector3& v); Vector3(const Point3& p); Vector3(const Normal3& n); Vector3 operator+(const Vector3& v) const; Vector3& operator+=(const Vector3& v); Vector3 operator-(const Vector3& v) const; Vector3& operator-=(const Vector3& v); Vector3 operator*(ldouble a) const; Vector3& operator*=(ldouble a); Vector3 operator/(ldouble f) const; Vector3& operator/=(ldouble f); Vector3 operator-() const; Vector3& operator=(const Vector3& v); bool operator==(const Vector3& v) const; bool operator!=(const Vector3& v) const; ldouble length() const; ldouble length_squared() const; void normalize(); friend Vector3 operator*(ldouble a, const Vector3& v); friend ldouble operator*(const Vector3& v1, const Vector3& v2); friend Vector3 operator^(const Vector3& v1, const Vector3& v2); friend Vector3 normalize(const Vector3& v); friend std::ostream& operator<<(std::ostream& os, const Vector3& v); friend std::istream& operator>>(std::istream& is, Vector3& v); ldouble x, y, z; };
实现部分大家就认真看书自己写一遍,练习练习,书中已经写明白了。
为了大家编译不会报错,头文件里一定要用#ifndef ....防止重复编译报错,之后的每一个头文件都需要这样提前定义,不再重复了。
然后在cpp文件中,要包含pch.h
这些都是基础的多文件管理和编译知识哈,没有通过的,自己多琢磨。我已经说到这份上了,你们肯定没问题的。