✅ Перевірена відповідь на це питання доступна нижче. Наші рішення, перевірені спільнотою, допомагають краще зрозуміти матеріал.
Az alábbi osztály egy origó középpontú és axes.x, axes.y, axes.z fél főtengelyhosszú ellipszoidot valósít meg, amelyre a sugár metszéspontszámítást implementáltuk. A vec3-ra az osztást GLSL stílusban, azaz koordinátánként függetlenül valósítottuk meg. Kérjük a hibás sorok sorszámát!
class : public Intersectable {
vec3 axes;
public:
Hit intersect(const Ray& ray) {
Hit hit;
1) float a = dot(ray.dir/axes, ray.dir/axes);
2) float b = dot(ray.start/axes, ray.dir/axes) * 2;
3) float c = dot(ray.start/axes, ray.start/axes) ;
4) float discr = b * b - 4 * a * c;
5) if (discr < 0) return hit; else discr = sqrtf(discr);
6) float t1 = (-b + discr)/2/a, t2 = (-b - discr)/2/a;
7) if (t1 <= 0) return hit; // t1 >= t2 for sure
8) hit.t = (t2 > 0) ? t2 : t1;
9) hit.position = ray.start + ray.dir * hit.t;
10) hit.normal = (hit.position - center)/radius;
hit.material = material;
return hit;
}
};