Przecięcie prostej ze sferą

Z testwiki
Wersja z dnia 14:46, 23 lut 2023 autorstwa imported>Beno (drobne techniczne)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania
Trzy możliwe przypadki:
1) Brak przecięcia,
2) Przecięcie w jednym punkcie,
3) Przecięcie w dwóch punktach.

W geometrii analitycznej prosta i sfera mogą mieć część wspólną w dokładnie jednym punkcie, dwóch punktach bądź wcale. Metody rozróżniania tych przypadków i ustalania punktów przecięcia są używane jako algorytm wykonywany wielokrotnie podczas operacji śledzenia promieni.

Obliczanie z użyciem wektorów

W zapisie wektorowym równania wyglądają w następujący sposób:

Równanie sfery:

𝐱𝐜2=r2,

gdzie:

𝐜 – środek,
r – promień,
𝐱 – punkty na sferze.

Równanie prostej zaczynającej się w 𝐨:

𝐱=𝐨+d𝐥,

gdzie:

d – parametr odległości wzdłuż prostej od punktu początkowego,
𝐥 – kierunek prostej (wektor jednostkowy),
𝐨 – punkt początkowy,
𝐱 – punkty na prostej.

Szukając punktów wspólnych, należy połączyć ze sobą równania i rozwiązać dla d:

Równania po podstawieniu
𝐨+d𝐥𝐜2=r2(𝐨+d𝐥𝐜)(𝐨+d𝐥𝐜)=r2.
Rozszerzając
d2(𝐥𝐥)+2d(𝐥(𝐨𝐜))+(𝐨𝐜)(𝐨𝐜)=r2.
Po przestawieniu
d2(𝐥𝐥)+2d(𝐥(𝐨𝐜))+(𝐨𝐜)(𝐨𝐜)r2=0.
Otrzymuje się równanie kwadratowe
ad2+bd+c=0,
gdzie:
a=𝐥𝐥=𝐥2,
b=2(𝐥(𝐨𝐜)),
c=(𝐨𝐜)(𝐨𝐜)r2=𝐨𝐜2r2.
Upraszczając
d=2(𝐥(𝐨𝐜))±(2(𝐥(𝐨𝐜)))24𝐥2(𝐨𝐜2r2)2𝐥2
𝐥 jest wektorem jednostkowym, a 𝐥2=1. W związku z tym równanie można uprościć do
d=(𝐥(𝐨𝐜))±(𝐥(𝐨𝐜))2𝐨𝐜2+r2.
  • Jeśli wartość pod pierwiastkiem ((𝐥(𝐨𝐜))2𝐨𝐜2+r2) jest mniejsza niż zero, rozwiązanie nie istnieje i prosta nie przecina sfery (przypadek 1).
  • Jeśli jest to zero, istnieje jedno rozwiązanie i prosta przecina sferę w jednym punkcie (przypadek 2).
  • Jeśli jest większa niż zero, istnieją dwa rozwiązania i prosta przecina sferę w dwóch punktach (przypadek 3).

Zobacz też

Bibliografia

  • David H. Eberly (2006), 3D game engine design: a practical approach to real-time computer graphics, 2nd edition, Morgan Kaufmann. Szablon:ISBN.