以前はうまく分離されていた 2 つのクラスに問題がありますが、今は結合したいと考えています。
問題の詳細についてはあまり詳しく説明しませんが、次のとおりです。
以前は、3 つの空間位置頂点を含むクラス Triangle がありました。
class Triangle
{
Vertex a,b,c ; // vertices a, b and c
} ;
プログラムには多くの Triangle インスタンスがあったため、それぞれが頂点の独自のコピーを保持していました。getArea()
などのメンバー関数getCentroid()
はクラスTriangle
で記述され、各Triangle
インスタンスには頂点 a、b、および c のコピーがあったため、領域または重心を見つけることは他のクラスに依存しませんでした。あるべき姿!
次に、他の理由から、頂点配列/インデックス バッファー スタイルの表現に移行したいと考えました。Scene
これは、すべての頂点がオブジェクト内にある単一の配列に格納され、それぞれが頂点自体のコピーではなくTriangle
、頂点への参照のみを保持することを意味します。Scene
最初は、ポインターに切り替えてみました。
class Scene
{
std::vector<Vertex> masterVertexList ;
} ;
class Triangle
{
Vertex *a,*b,*c ; // vertices a, b and c are pointers
// into the Scene object's master vertex list
} ;
(利点について疑問がある場合は、主に頂点を共有する三角形に関係する理由でこれを行いました。*a が移動すると、その頂点を使用するすべての三角形が自動的に更新されます)。
これは本当に良い解決策だったでしょう!しかし、 std::vector はpointers を無効にし、 class のマスター頂点リストに std::vector を使用していたため、確実に機能しませんでしたScene
。
したがって、整数を使用する必要がありました。
class Triangle
{
int a,b,c ; // integer index values
// into the Scene object's master vertex list
} ;
しかし今、私はこの新しいカップリングの問題を抱えています.それ自身の領域または重心を見つけるために、クラスは以前はアクセスできなかった場所にTriangle
アクセスする必要があります. class Scene
何かを fsck`d したように見えますが、実際にはそうではありません。
WWYD?