CBS uygulamalarında doğru kesişimleri


11 NIS 2006

Uzun zamandır tezimin raster kısmını bitirmiş, vektör kısmı üstünde çalışmaktaydım. 3 haftadır da vektör sınıfındaki problemi bulmak için uğraşıyordum.

Neyse ki dün gece sorunu buldum. Sorun vektörlerin doğru-doğru kesişimini bulan fonksiyondaymış. Fonksiyon görüntü dışında olan noktaları da kesişim gibi gösterip negatif değerler ile geri döndürüyormuş. Pocket PC’de hata ayıklamak normal masaüstüne göre daha zor olduğu için ancak bulabildim sorunu. Doğru-doğru kesişim fonksiyonunu buraya da ekleyeceğim ki ilerde kullanmak isteyen benim kadar zorlanmasın :D

Doğru-Doğru kesişim fonksiyonu (C++)

Not: Bu fonksiyon geriye nokta (POINT) döndürür. Nokta (-1,-1) ise nokta kesişmiyor demektir.
—————————————————————————————————

POINT CDeneme2View::FindPointIntersectionY(POINT p1, POINT p2, POINT p3, POINT p4)
{
POINT fp;

float ua_t, ub_t, u_b;
ua_t = (p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x);
ub_t = (p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x);
u_b = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);

if ( u_b != 0 ) {
float ua = ua_t / u_b;
float ub = ub_t / u_b;

if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {
fp.x = p1.x + ua * (p2.x - p1.x);
fp.y = p1.y + ua * (p2.y - p1.y);
} else {
fp.x = -1;
fp.y = -1;
}
}
else {
if ( ua_t == 0 || ub_t == 0 ) {
fp.x = -1;
fp.y = -1;
}
else {
fp.x = -1;
fp.y = -1;
}
}

return fp;

}



Site Tavsiyesi : www.mekanrazzi.com

Bu yazı ile ilgili rastgele seçilmiş 10 yazı :




Hareketler

Yorum Bırak

Bu etiketleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Yorumu göndermek için onay kodunu girmelisiniz!


Joost™