Strahlendreieck-Schnittpunkt C++
Posted: 03 Jan 2025, 18:45
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:
Daneben befindet sich das Vec3-Objekt, das ich zum Speichern der Vektoroperationen verwende:
Code: Select all
Ray *ray = new Ray(Vec3(0), chosenTriangle->GetTriangleMidpoint());
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