Пересечение между лучом и сферой - решение квадратного c уравнения - PullRequest
0 голосов
/ 29 марта 2020

Я не могу понять, как решить мое квадратное c уравнение, чтобы проверить пересечение между лучом и сферой. Сфера должна выглядеть так:

Конечная сфера

        // r = radius = sphere.radius;
        // m = center = sphere.center;

        float t;

        // ray intersection uses quadratic equation
        float a, b, c, d;

        // NOT SURE ABOUT THIS PART HERE !
        a = rayVx * rayVx + rayVy * rayVy + rayVz * rayVz;
        b = 2.0f * (rayEx * rayVx + rayEy * rayVy + rayEz * rayVz - rayVx * sphere.center[0] - rayVy * sphere.center[1] - rayVz * sphere.center[2]);
        c = rayEx * rayEx - 2 * rayEx * sphere.center[0] + sphere.center[0] * sphere.center[0] + rayEy * rayEy - 2 * rayEy * sphere.center[1] + sphere.center[1] * sphere.center[1] + rayEz * rayEz - 2 * rayEz * sphere.center[2] + sphere.center[2] * sphere.center[2] - sphere.radius * sphere.radius;

        // positive discriminant determines intersection
        //d = -42;
        d = (float) Math.pow(b, 2) - (4 * a * c);
        // no intersection point? => next object
        if (d <= 0)
            continue;

        // from here: intersection takes place!

        }
    }

    // no intersection point found => return with no result
    if (minObjectsIndex == -1)
        return null;

    // intermediate version
    Random rd = new Random();
    return new Color(rd.nextFloat(), rd.nextFloat(), rd.nextFloat());

    }

    public static void main(String[] args) {
    Raytracer00 rt = new Raytracer00();

    rt.doRayTrace();
    }
}

Я сейчас не в курсе. Я не очень понимаю, как решить квадратное c уравнение для a, b, c. Я загрузил весь проект на workupload , если кто-то хочет увидеть полный проект.

Я приехал из мира iOS и никогда не делал ничего в Java раньше (к сожалению). Буду признателен, если кто-нибудь поможет мне с этим! Заранее спасибо.

...