gpt4 book ai didi

c++ - C++中的基本类设计,处理相互依赖的类

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:17 24 4
gpt4 key购买 nike

我有两个类,一个是 3D vector 类 (Vector3),其成员是 3 个 float 数组 (float[3]),另一个是 3 x 3 矩阵类,它将其中的 3 个 vector 存储在另一个数组中 (Vector3[3] ]).我的 vector 类要求矩阵类绕轴旋转,而我的矩阵类要求一切都用 vector 。我正在使用前向声明和指针来处理它,就像这个问题一样:What is the best way to deal with co-dependent classes in C++? ,但必须有更好的方法来设计它以完全避免这种情况。目前我在我的矩阵头文件中声明了一个指向 Vector3 的指针,然后在我的实现文件中用 new 初始化它,但这感觉很笨拙。关于如何解决这个问题的任何指示(没有双关语)?编辑:我使用 vector 类来表示我打算绕任意轴旋转的 3D 点。

我希望它工作的代码:

    //Vector3.h

#include "Matrix3.h"
class Matrix3;

class Vector3 {
float xyz[3];
};

//Vector3.cpp

Vector3 Vector3::rotatePoint(Vector3 o, Vector3 a, float theta) {

Vector3 point = (*this);
Vector3 x = Vector3(1,0,0);
Vector3 y = Vector3(0,1,0);
Vector3 z = Vector3(0,0,1);

// Create new coordinate system
Vector3 new_coord[4];
new_coord[0] = o;
new_coord[1] = a.normalize();

unsigned closer_to;
if (a*x < a*y) {
new_coord[2] = (a % x).normalize();
closer_to = 0; // x
}
else {
new_coord[2] = (a % y).normalize();
closer_to = 1; // y
}
new_coord[3] = (a % new_coord[2]).normalize();

// Transform point to new coord system
Matrix3 trans_matrix = Matrix3(new_coord[0], new_coord[1], new_coord[2]);
point = trans_matrix*(point - o);

// Rotate about a by theta degrees
Matrix3 r_m(closer_to, theta);
point = r_m*point;

//Transform back to original coord system
point = (trans_matrix.inverse()*point) + o;
return point;
}
//Matrix3.h

#include "Vector3.h"

class Vector3;

class Matrix3 {
Vector3 rows[3];
}

我用来让它工作的代码:

    //Vector3.h

class Matrix3;

class Vector3 {
float xyz[3];
};

//Matrix3.h

#include "Vector3.h"

class Vector3;

class Matrix3 {
Vector3 *rows;
}

//Matrix3.cpp

Matrix3::Matrix3() {
rows = new V3[3];
}

最佳答案

我采纳了@n.m 的建议。和@Chris Dodd's 刚刚从我的 Vector header 中删除了 Matrix3 包含,并进入我的 Vector 实现文件,如下所示:

    //Vector3.h

class Vector3 {
float xyz[3];
}

//Vector.cpp

#include "Vector3.h"
#include "Matrix3.h"

//Matrix3.h

#include "Vector3.h"
class Vector3;

class Matrix3 {
Vector3 rows[3];
}

//Matrix3.cpp

#include "Matrix3.h"

关于c++ - C++中的基本类设计,处理相互依赖的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com