Not:

Bu blog için açmış olduğum Twitter feed hesabımı takip ederek, yeni yazılarımdan daha rahat haberdar olabilirsin!

Vektörlerin Nokta Çarpımı (Dot Product)

Vektörlerde nokta çarpımı (terim olarak dot product diye geçer) oldukça basittir. Zor olan kısım nokta çarpımının ne işe yaradığını anlayabilmektir, 2 vektörü birbiriyle niye çarparız, neden ihtiyaç duyarız? Bu yüzden yazının bundan sonrasında çok teknik açıklamalardan ziyade, kavramları gözünüzde canlandırabilmeniz için daha esnek bir anlatım yolu seçeceğim.

2 vektörün nokta çarpımı, iki vektörün x ve y değerlerinin çarpımının toplamına eşittir. Ortaya çıkan sonuç bize bir vektör değil, skaler bir değer verir.

enter image description here

var nokta_carpim=v1.x*v2.x+v1.y*v2.y

Neden Nokta Çarpımı Kullanırız?

  • 2 vektörün birbiri arasında yaptığı açıyı öğrenmek istediğimizde…
  • 1 . vektörün 2. vektörün üzerine izdüşümünü bulmak istediğimizde, yani 1. vektörden 2. vektörün açısına göre dik indiğimizde 2. vektör üzerindeki çarpışma noktasını bulmak istediğimizde…

Bunları nasıl yapabiliyoruz?

Daha önceki yazımda kosinüs teoreminden ve bunun çok önemli olduğundan bahsetmiştim. 2 vektörün çarpımı bize şöyle bir bağıntı verir;

enter image description here

Bu bağıntının kaynağı kosinüs teoremi dir.

Bir vektörün kendisiyle yaptığı nokta çarpımı, o vektörün büyüklüğünün karesine eşittir.

Bu bağıntıyı elde etmek için kosinüs teoremindeki bulmaya çalıştığımız 3. kenarın karesi yerine (2 vektör için c kenarı v1-v2’dir ) (v1-v2)*(v1-v2) yazarız, sadeleştirmeler olur ve ortaya bu formül çıkar. Bunun ıspatını anlamanızı tavsiye ederim ve tam da bununla ilgili çok güzel bir eğitim videosu var. Attığım saniyeden izleyebilirsiniz.

2 Vektörün Arasındaki Açı

Şimdi elimizde şöyle güzel bir formülümüz var;

V1 . V2 = |V1| x |V2| x cos(aci)

İki vektörün nokta çarpımını yaptık ve 2 vektör arasındaki açıyı öğrenmek istiyoruz. Bunun için tek yapmamız gereken formülümüzdeki cos(aci) değerini yalnız bırakmak.

cos(aci)=V1.V2/(|V1|x|V2|)

Sonraki aşamada bulduğumuz cos(aci) değerini ters kosinüs yani arccos( cos(aci) ) fonksiyonuna sokup radyan cinsinden acimizi bulabiliriz.

Kodla gösterelim;

//v1 ve v2 adında iki vektorumuz var
//Nokta carpimini bulalim
var nokta_carpim=v1.x*v2.x+v1.y*v2.y;
//Cos(aci)'yı bulalım
var cos_aci=nokta_carpim/(v1.buyukluk*v2.buyukluk);
//Açımızı bulalım
var aci=acos(cos_aci);
//İstersek radyandan dereceye çevirebiliriz
var aci_derece=aci/( Math.PI/ 180);

1. Vektörden 2. Vektöre inilen Dikmenin 1. Vektörün Başlangıç Noktasına Mesafesi

enter image description here

Formülümüze tekrardan bir bakalım;

V1 . V2 = |V1| x |V2| x cos(aci)

Burada hangi vektörümüze dik inmek istiyorsak, o vektörün uzunluğunu eşitliğin diğer tarafına atıyoruz.

V1.V2/|V2|=|V1|*cos(aci)

Görseldeki inilen dikme için kodlarımız şöyledir;

//v1 ve v2 adında iki vektorumuz var
//Nokta carpimini bulalim
var nokta_carpim=v1.x*v2.x+v1.y*v2.y;
//V1 . V2 = |V1| x |V2| x cos(aci) formülümüzde 
//dikme inmek istediğimiz vektörün uzunluğunu eşitliğin 
//diğer tarafına atıyoruz.
var v1_den_v2_ye= nokta_carpim/V2;
var v2_den_v1_ye= nokta_carpim/V1;

Vektörlerle çalışırken bu izdüşüm hesaplamaları bize inanılmaz hızlı ve optimize problem çözme yeteneği kazandırır.

Bir sonraki yazıda, dikey nokta çarpımı olarak adlandırdığımız (diğer isimleriyle perp dot product, 2d cross product) çarpımı öğreneceğiz. Bu çarpımı ve amacını iyi anlayabilirseniz, dikey nokta çarpımı aslında bunun farklı bir kullanımından başka birşey olmadığını görmüş olacaksınız.

Yorumlar

  1. Gerçekten muhteşem bir arayüz ve muhteşem bir anlatım. Bu tarz konu anlatımlarının devamı gelmesi dileğiyle...

    YanıtlaSil

Yorum Gönder