Page 1 of 1

Strahlendreieck-Schnittpunkt C++

Posted: 03 Jan 2025, 18:45
by Guest
Ich teste, ob ein Strahl ein Dreieck schneidet. Im Moment verwende ich den folgenden Code, um zu testen, ob es einen Schnittpunkt zwischen einem Dreieck und dem Strahl vom Ursprung zum Mittelpunkt des Dreiecks gibt:

Code: Select all

Ray *ray = new Ray(Vec3(0), chosenTriangle->GetTriangleMidpoint());
Daneben befindet sich das Vec3-Objekt, das ich zum Speichern der Vektoroperationen verwende:

Code: Select all

template
class Vec3
{
public:
T x, y, z;
Vec3() : x(T(0)), y(T(0)), z(T(0)) { }
Vec3(T xx) : x(xx), y(xx), z(xx) { }

Vec3(T xx, T yy, T zz) : x(xx), y(yy), z(zz) {}
Vec3& normalize()
{
T nor2 = length2();
if (nor2 > 0) {
T invNor = 1 / sqrt(nor2);
x *= invNor, y *= invNor, z *= invNor;
}
return *this;
}

Vec3 operator * (const T &f) const { return Vec3(x * f, y * f, z * f); }
Vec3 operator * (const Vec3 &v) const { return Vec3(x * v.x, y * v.y, z * v.z); }
T dot(const Vec3 &v) const { return x * v.x + y * v.y + z * v.z; }
Vec3 operator - (const Vec3 &v) const { return Vec3(x - v.x, y - v.y, z - v.z); }
Vec3 operator + (const Vec3 &v) const { return Vec3(x + v.x, y + v.y, z + v.z); }
bool operator == (const Vec3 &v) { return x == v.x && y == v.y && z == v.z; }
Vec3 operator - () const { return Vec3(-x, -y, -z); }
T length2() const { return x * x + y * y + z * z; }
T length() const { return sqrt(length2()); }
Vec3 CrossProduct(Vec3 other)
{
return Vec3(y*other.z - other.y*z, x*other.z - z*other.x, x*other.y - y*other.x);
}
friend std::ostream & operator