// Forward declarations struct Point; struct Node { Node(int axis, Point *point, Node *left, Node *right) : axis(axis), point(point), left(left), right(right) {} int axis; Point *point; Node *left; Node *right; }; struct Triangle { Triangle(Point *p1, Point *p2, Point *p3) : p1(p1), p2(p2), p3(p3) {} Point *p1; Point *p2; Point *p3; }; struct Point { Point(float coordinates[3], Triangle *triangle) : coordinates(coordinates), triangle(triangle) {} Point operator+(const Point &other) const { return Point(new float[3]{coordinates[0] + other.coordinates[0], coordinates[1] + other.coordinates[1], coordinates[2] + other.coordinates[2]}, nullptr); } Point operator*(float scalar) const { return Point( new float[3]{coordinates[0] * scalar, coordinates[1] * scalar, coordinates[2] * scalar}, nullptr); } float *coordinates; Triangle *triangle; }; struct Ray { Ray(float origin[3], float direction[3]) : origin(origin), direction(direction) {} float *origin; float *direction; bool intersects_triangle(Triangle *triangle) { // TODO return false; } };