Bir doğru parçası ile kürenin kesim noktasını bulan bir program

Bir doğru parçası ile kürenin kesim noktasını bulan bir program nasıl yazılır? Üniversitede bilgisayar mühendisliği okuyorum ve C programlama dersi ödevim için çözemediğim sorulardan biri. Aynı şekilde doğru parçası ve üçgenin kesim noktasını bulan programa da ihtiyacım var. Yol gösterebilirseniz sevinirim.

Dogruyu parametrik hale getirirsen (x = a*t + b, y = c*t + d, z = e*t + f) kurenin yuzey denklemiyle birlestirip (x² + y² + z² = r) kesisim noktalarinin “parametrelerini” (t) bulabilirsin. Sonra (varsa) bu iki kesisim noktasinin arasini dogru parcasini temsil eden t araligiyla birlestirmen gerekiyor. Elde ettigin aralik (varsa) dogru parcasinin kureyle kesistigi dogru parcasini temsil edecek.

Ucgen icin ise once ucgenin bulundugu duzlemle kesistirip (ayni sekilde parametrik yapabiliyor olman lazim) sonra kesisim noktasinin ucgenin kenarlarinin hangi tarafinda kaldigina bakman gerekiyor. Ucunun de icindeyse ucgenle kesisiyor, noktasi da zaten elimizde.

Bu tur problemleri vektorler ve vektor islemleriyle (projection, dot product, cross product, en yakin nokta/mesafe bulma) dusunmek daha kolay ama ogrenmesi daha cok vakit aliyor.

Mesela isin/ucgen icin surada yaptigim: Isini ucgenin yuzey normaline project et, yuzey duzlemine yaklasma hizini bul. Isinin baslangic noktasi ile yuzey duzlemi arasindaki mesafeyi hiza bol ve kesisme zamanini bul. Zamani isin denklemine tak ve kesisim noktasini bul. Ucgenin kenarlarini temsil eden isinlari ucgenin yuzey normaliyle (normal = herhangi iki isinin × carpimi) × carp, iceriye bakan vektorleri bul. (kesisim noktasi → kenarin herhangi bir noktasi) vektorunun bu vektorlerle · carpimini alarak asagi yukari ayni yone mi ters yonlere mi baktiklarini bul. Ters yone bakiyorlarsa kenarin icinde.

En kolay veya hizli cozum olmayabilir ama kendim cikartabildim. Daha sonra isina genislik verebildim (nokta degil kure olsun diye).

4 Beğeni