-3

ポイントとトライアングルの 2 つの異なるクラスを作成したいですか?

クラスの実装では、点の配列を作成し、次に三角形の配列を作成して、配列内の各三角形が配列内の 3 つの点にリンクされるようにしますか?

クラス三角形に最適なデータ構造は何ですか?

編集: もっと説明しましょう: Apoints という点の配列があり、新しい三角形オブジェクトの配列を作成したいと考えています。各三角形に 3 つの点を割り当てたいと思います。ただし、たとえば、Apoints でポイントを変更すると、このポイントを持つすべての三角形にも変更を実装する必要があります。

ありがとうございました

4

5 に答える 5

2

別の解決策、今回は C++11 の方法:

class Triangle {
private:
    std::array<Point,3> m_points;

public:
    Triangle(const std::array<Point,3> & points): m_points(points) {}
};
于 2013-05-16T18:33:13.843 に答える
1

どうですか:

class Triangle
{
   private:
      Point a;
      Point b;
      Point c;

   public:
      Triangle( Point pa, Point pb, Point pc );
}

これはあなたが探していたものですか?

于 2013-05-16T18:21:23.870 に答える
1

私は最も簡単な解決策に行きます:

class Triangle {
private:
    std::vector<Point*> vertices;
};
于 2013-05-16T18:22:52.023 に答える
1

これはどうですか?

class Triangle {
    public:
        Triangle(Point corners[3]) : corners_(corners) {}       
    private:
        Point corners_[3];
};

あなたのコメントによると、新しいメモリの割り当てを避けるために、このようなものが必要になるかもしれませんが、同時に、三角形には 3 つのポイントしかないことを確認してください。

class Triangle {
    public:
        Triangle(Point (&corners)[3]) : corners_(corners) {}
    private:
        Point (&corners_)[3];
};

小さな例は次のようになります: http://ideone.com/3csNVq

ただし、所有権と削除されたポイントへのアクセスには注意してください。

于 2013-05-16T18:23:30.997 に答える
0

三角形が点だけで構成されている場合、要素を 1 つずつリンクする必要はありません。

struct Point { double c[3]; };

struct Triangle 
{ 
  Point p[3]; 
};

class Triangles
{
public:
  Triangles (Point * point_ptr, size_t const num_points)
    : points(point_ptr), size(num_points)
  { }
  Triangle operator[] (size_t const i)
  {
    size_t p_index = 3*i;
    if (p_index < size)
    {
      return *((Triangle*)points+p_index);
    }
  }
private:
  Point * points;
  size_t size;
};

テストされていませんが、それがあなたができる方法です。

于 2013-05-16T18:48:42.867 に答える