Bir Objenin Bir Vektöre Göre Konumunu Bulma

Karşılaştığım ilk andan itibaren beni heyecanlandıran ve çözdüğümde kendimi harika hissetmeme sebep olan bir problemi paylaşacağım sizlerle. Bir noktanın, bir vektöre göre konumu. Bu nokta vektörün sağında mı, yoksa solunda mı?

Üstteki görselde neler oluyor, biraz ondan bahsedelim. StartPoint’ten EndPoint’e doğru bir doğrumuz var. Bu doğrunun ucu olarak Pointer objesini yerleştirdik. Pointer objesi doğrunun büyüklüğünü anlamamız için bize yardımcı oluyor. Görsel bir yardımcıdan daha fazlası değil. CheckAbleObject ise bu doğrunun sağında mı solunda mı diye kontrol edeceğimiz noktayı temsil ediyor. Solunda ise sarı, sağında ise pembe…

CheckAble Object Sınıfı

CalculateParameters Fonksiyonu

Burada StartPoint ve Endpoint arasındaki uzaklığı, yani _distance’ı buluyoruz. Bu uzaklığı Pointer’ımızı yerleştirmek için kullanacağız. _vector parametremize ise EndPoint ve StartPoint vektörlerini birbirinden çıkararak, noktamızın yerini belirlemek için alacağımız referans olan vektör değerini atıyoruz. Son olarak da _normalizedVector parametresine, vektörümüzü normalize ederek bir birimlik vektör haline getiriyoruz. Bunu Pointer’ımızı _distance değeri kadar öteye yerleştirebilmek için yaptık.

SetPointerPosition Fonksiyonu

A(x,y,z) gibi bir nokta olan EndPoint’e _distance * _normalizedVector değerini ekleyerek, Pointer’ımızı EndPoint noktasından, bulduğumuz vektörün doğrultusunda _distance uzaklık değeri kadar öteye yerleştiriyoruz.

DrawLine Fonksiyonu

StartPoint, EndPoint ve Pointer noktaları arasında bir line çiziyoruz. LineRenderer hakkında bir çalışma daha incelemek isterseniz geçmişte yazdığım bu yazıya bakabilirsiniz.

CalculateDotPositionSign Fonksiyonu

Bütün işi yapan fonksiyona geldik. Bir noktanın bir vektöre göre konumunu inceleyen bir yaklaşım araştırdığımda, şöyle bir kural gördüm.

Sign((Ax-Bx) * (My – Ay) – (By – Ay) *  (Mx – Ax)) : İşaretin sonucunun -1 ya da +1 çıkmasına göre M noktasının AB doğrusunun ne tarafında olduğunu böyle buluyoruz.

Bu işlemi uyguladım ve gözlerimde beliren bir kaç damla mutlulukla, matematiği bir kez daha sevdim.

Bu problemi araştırırken, vektör matematiği hakkında bilgi eksiğim olduğunu fark ettim ve şuradaki Computer Graphics dökümanlarını okumaya başladım. Size de öneriyorum.

Github Proje Linki

Leave a Reply

Your email address will not be published. Required fields are marked *