AB ve CD - kod iki parçadan kesişme noktasını bulmaya çalışır.
Eğer bu işlemleri yorumlamak nasıl dayanarak bunu yapıyor açıklamak için birçok farklı yolu vardır.
en A noktası koordinatları olduğunu varsayalım (xa, ya), B - (xb, yb) vb. Diyelimki
dxAB = xb - xa
dyAB = yb - ya
dxCD = xd - xc
dyCD = yd - yc
İki doğrusal denklem aşağıdaki sistem
| dxAB dxCD | | t | | xc-xa |
| | * | | = | |
| dyAB dyCD | | u | | yc-ya |
için çözülmesi halinde tve usize orantılı hattı AB (değerine kesişme noktasının konumunu verecek t) ve hat CD (değerine u). Bu değerler aralığında olacaktır [0, 1]noktası (segmenti içeren satırda) segmentinde dışında olan nokta, karşılık gelen segmenti ve bu aralığın dışında olduğunda geçerlidir.
Biz iyi bilinen kullanabilirsiniz lineer denklem bu sistemi çözmek için Cramer kuralı . Bunun için biz belirleyici gerekecektir
| dxAB dxCD |
| |
| dyAB dyCD |
hangi tam olarak determinant(b - a, c - d)kodunuzdan. (Aslında, ne burada sahip olduğunu determinant(b - a, d - c), ancak bu açıklama amacıyla gerçekten önemli değildir. Herhangi bir nedenden dolayı yayınlanmıştır kod aşağıda PS nota bakın C ve D takas).
Ve ayrıca bir belirleyici gerekecektir
| xc-xa dxCD |
| |
| yc-ya dyCD |
hangi tam olarak determinant(c-a,c-d)kodunuzdan ve belirleyici arasında
| dxAB xc-xa |
| |
| dyAB yc-ya |
hangi tam olarak determinant(b-a,c-a).
Cramer kuralı uyarınca bu belirleyicilerin bölündüğünde bize değerlerini verecek tve udeftere kodu yapılır tam olarak ne olduğu,.
Kod, daha sonra değerlerini test etmeye başlıyor tve usegmentler aslında kesişen eğer her ikisi olsun yani kontrol etmek tve uaittir [0, 1]değişir. İsterlerse, bu değerlendirerek gerçek kesişim noktasını hesaplar a*t+b*(1-t)(eşit biçimde, bu değerlendirilebilir c*u+d*(1-u)). (Yine aşağıda PS nota bakınız).
PS orijinal kod noktaları D ve C olarak kod yaptığı bir anlamda "takas" olan c - dyapmam, d - cbenim açıklama. Ama bu seferki dikkatli işaretlerle sürece, algoritmanın genel bir fikir için hiç fark etmez.
C ve D noktasının bu takas de nedeni, a*(1-t)+t*bkesişme noktasını değerlendirirken kullanılan ekspresyon. Normalde benim açıklama olduğu gibi böyle bir şey görmeyi beklediğiniz one'd a*t+b*(1-t)orada. (Gerçi bu konuda şüphelerim var. Görmeyi beklediğiniz a*t+b*(1-t)bile sürümünde orada. Bir hata olabilir.)
PPS kodu kontrol etmek unuttuysanız yazar det == 0segmentleri paralel olduğunda durumda gerçekleşecek olan (ya da çok yakın 0).