Jak można znaleźć punkt przecięcia (pół)prostej i dowolnej bryły 3d opisanej analitycznie? Do tej pory wyznaczałem to iteracyjnie, ale teraz wolałbym mieć dokładny punkt. Generalnie mam klasę abstrakcyjną z wirtualną metodą double DoFormula(double x,double y,double z) i każdy podtyp (kula, walec,itd.) definiuje jej własną wersję. Oprócz tego klasa abstrakcyjna ma zdefiniowaną metodę Intersect, która jako parametr wejściowy bierze sobie tą prostą bądź półprostą (w zasadzie półprosta, bo potrzebny mi jest punkt najbliższy punktowi startowemu).
Wiem ze mniej wiecej wzor bedzie taki f(x,y,z) - (ax + bx + cx + d) = 0, ale co z tym dalej zrobić, czy to ruszyć wyznacznikiem czy podstawić coś - nie wiem. Mam w klasie pomocniczej napisaną funkcję liczącą normalną powierzchni w punkcie (na zasadzie różniczki po x,y,z), ale nie wiem czy to się tutaj przyda do czegoś. Dzięki za pomoc.