Ana içerik
Bilgisayar Programlama
Konu: Bilgisayar Programlama > Ünite 5
Ders 4: Vektörler- Vektörlere giriş
- Zor görev: Vektör yürüyüşçüsü
- Daha fazla vektör matematiği
- Zor görev: Işın kılıcı
- Vektör büyüklüğü & normalizasyonu
- Zor Görev: Büyüklük görselleştirme
- Vektör hareketi
- Zor görev: Fren yapan araba
- Statik işlevler ve anlık yöntemler
- Zor görev: Statik fonksiyonlar
- Etkileşimli vektör hareketi
- Zor Görev Fare takipçisi
© 2023 Khan AcademyKullanım ŞartlarıGizlilik PolitikasıÇerez Politikası
Statik işlevler ve anlık yöntemler
Algoritma No 3'e (fareye doğru hızlanma) gelmeden önce, vektörler ve
PVector
nesnesiyle çalışmanın çok önemli bir başka yönünün üzerinden geçmemiz gerekir: statik fonksiyonlar ve nesnelere ait yöntemler arasındaki fark.Bir saniyeliğine vektörleri unutarak, aşağıdaki koda bakın:
var x = 0;
var y = 5;
x = x + y;
Gayet kolay, öyle değil mi?
x
in değeri 0'dır, buna y
ekleriz ve şimdi x
5'e eşittir. PVector
hakkında öğrendiklerimizin ışığında, buna karşılık gelen kodu kolaylıkla yazabiliriz.var v = new PVector(0,0);
var u = new PVector(4,5);
v.add(u);
v vektörünün değeri (0,0)'dır, bunu u ile toplarız, ve şimdi v (4,5)'e eşittir. Kolay, öyle değil mi?
Başka bir basit matematik örneğine bakalım:
var x = 0;
var y = 5;
var z = x + y;
x
in değeri 0'dır, buna y
ekleriz ve sonucu yeni bir z
değişkeninde saklarız. Bu örnekte x
değeri de, y değeri de değişmez! Bu önemsiz bir nokta gibi gelebilir ve sayılarla matematik işlemleri söz konusu olduğunda oldukça mantıklı olabilir. Ancak, PVector
deki matematiksel işlemlerde bu kadar açık değildir. Öğrendiklerimize göre, kodu yazmayı deneyelim.var v = new PVector(0,0);
var u = new PVector(4,5);
var w = v.add(u); // Aldanmayın, bu yanlıştır!!!
Üstteki iyi bir tahmine benziyor, ama
PVector
nesnesi bu şekilde çalışmaz. add()
tanımına bakarsak...PVector.prototype.add = function(v) {
this.x = this.x + v.x;
this.y = this.y + v.y;
};
...bu kodun hedefimizi gerçekleştirmediğini görürüz. İlk olarak, yeni bir
PVector
vermez (return
ifadesi yoktur) ve ikinci olarak da çağrıldığı PVector
değerini değiştirir. İki PVector
nesnesini toplamak ve sonucu yeni bir PVector
olarak vermek için, ''statik'' add()
fonksiyonunu kullanmanız gerekir.''Statik'' fonksiyon, bir nesnede tanımlanmıştır, ama nesnenin özelliklerini değiştirmez. Peki neden nesnede tanımlıyoruz? Genellikle, nesneyle ilgisi vardır, bunun için ona bağlanması mantıklıdır. Nesneyi bir isim alanı olarak kullanır. Örneğin,
PVector
'de tanımlı tüm statik fonksiyonlar, geçirilmiş PVector
nesnelerine bir tür işlem uygularlar ve bir değer verirler. Bu fonksiyonları genel olarak da tanımlayabiliriz, ancak bu şekilde, genel fonksiyonlardan kaçınırız ve ilgili işlevselliği gruplandırmada daha iyi yollar kullanırız.Bunları karşılaştıralım.
add()
nesneli yöntemini şu şekilde kullanırız:v.add(u);
Bu kod satırı
v
yi değiştirir, onun için bir çıktı değerini kaydetmemiz gerekmez. Diğer taraftan, add()
statik fonksiyonunu şöyle kullanırız:var w = PVector.add(v, u);
Bu fonksiyonun sonucunu bir değişkende saklamazsak, bu kod satırı işe yaramaz, çünkü statik versiyon nesneleri değiştirmez.
PVector
ün statik fonksiyonları, girdi PVector
lerden birinin değerini değiştirmeden PVector
nesnelerinde genel matematik işlemleri gerçekleştirmemizi sağlar.add()
'in statik versiyonunu şöyle yazarız:PVector.add = function(v1, v2) {
var v3 = new PVector(v1.x + v2.x, v1.y + v2.y);
return v3;
};
Burada birkaç fark vardır:
- Fonksiyonu prototipinde değil , doğrudan nesnede tanımlarız
- Fonksiyonun içindeki
this
anahtar sözcüğe hiç ulaşmayız - Fonksiyondan bir değer elde ederiz
PVector nesnesinde
add()
, sub()
, mult()
ve div()
in statik versiyonları vardır. Nesnelere ait yöntemlerde bulunmayan ekstra statik fonksiyonlar da bulunur, angleBetween()
, dot()
ve cross()
gibi. PVector
le program yazmaya devam ettikçe, bu fonksiyonları kullanacağız.Bu "Doğal Simülasyonlar" dersi, Daniel Shiffman'ın"Kodun Doğası"'nın bir türevidir ve Creative Commons Yüklemesi-Ticari Olmayan 3,0 Dağıtıma Açık Lisansla kullanılmaktadır.
Tartışmaya katılmak ister misiniz?
Henüz gönderi yok.