void float3::Orthonormalize(float3 &a, float3 &b, float3 &c) { assume(!a.IsZero()); a.Normalize(); b -= b.ProjectToNorm(a); assume(!b.IsZero()); b.Normalize(); c -= c.ProjectToNorm(a); c -= c.ProjectToNorm(b); assume(!c.IsZero()); c.Normalize(); }
float3 Circle::ExtremePoint(const float3 &direction) const { float3 d = direction - direction.ProjectToNorm(normal); if (d.IsZero()) return pos; else return pos + d.ScaledToLength(r); }
Plane::Plane(const Line &line, const float3 &normal) { float3 perpNormal = normal - normal.ProjectToNorm(line.dir); Set(line.pos, perpNormal.Normalized()); }
Plane::Plane(const Ray &ray, const float3 &normal) { float3 perpNormal = normal - normal.ProjectToNorm(ray.dir); Set(ray.pos, perpNormal.Normalized()); }