Matematik her zaman zor bir konu olmuştur, hepimiz bir noktada matematik çalışmakta zorlandık, ancak hepimiz matematiğin her şeyin doğası olduğu konusunda hemfikiriz, mühendislik, doğa bilimleri, tıp, bilgisayar bilimi gibi çok çeşitli alanlarda son derece önemlidir. , ve liste uzayıp gidiyor.
Oyun geliştirme alanında, matematik, herhangi bir AAA oyunu gibi basit veya çok daha karmaşık olsun, herhangi bir başarılı oyunun özüdür, her türlü görevi gerçekleştirmek için önemli ölçüde kullanıldığını görürsünüz, bu tür görevler karakter hareketi gibi bir şey olabilir. , kamera kontrolörleri, AI sistemleri veya atlama, atılma gibi her türlü oyun mekaniği veya tırmanma sistemleri gibi daha gelişmiş olanlarda. Herhangi bir oyunun üretimi için gereklidir.
Örneğin, hareket ettiğinde belirli bir hedefe bakmaya devam etmek için bir NPC “oynanamaz karakteri” döndürmek isteyebilirsiniz, aslında bu, basitliğinden yararlanabileceğiniz birçok örnekten biridir. NPC'nizi döndürmek için doğru açıyı hesaplamak için Nokta Ürün.
Matematiksel olarak, nokta çarpım, yani skaler ürün, aşağıdaki gibi tanımlanan iki farklı şekilde tanımlanabilir:
Bunu 3B uzayda düşünelim, iki vektördeki karşılık gelen girişlerin çarpımlarının toplamıdır ve merkezi bir nokta kullanılarak yazılır, yani
Nokta çarpımı yukarıdaki iki vektör üzerinde gerçekleştirmenin sonucu, -13 değerine eşit bir skalerdir. Ama bu ne anlama geliyor ve bu bilgiyi nasıl kullanabiliriz? Yeni başlayanlar için, bu durumda sayı o kadar önemli değil, bu nedenle nokta çarpımını hesaplamadan önce normalleştirilmiş vektörlerle çalışmak daha iyidir.
Bir vektörü normalleştirmek, herhangi bir uzunluktaki bir vektörü alıp 1'e değiştirmek anlamına gelir, elbette hala öncekiyle aynı yönü işaret eder, yalnızca 1 uzunluğunda olur, buna birim vektör denir. Herhangi bir vektörün birim vektörünü elde etmek için her girişi aşağıdaki gibi büyüklüğe bölmeniz yeterlidir:
Bu nedenle, daha önce bahsedilen (a & b) verilen iki vektörü normalleştirdikten sonra, şimdi -1 değerine eşit bir skaler elde etmek için nokta çarpımını tekrar hesaplayabiliriz.
Normalize vektörler arasındaki nokta çarpımını hesaplamak, [-1,1] aralığında bir değer verecektir.
Oyuncu NBC'nin arkadan yana ve ardından ön tarafına hareket ettiğinde nokta çarpım sonucunun nasıl değiştiğine dikkat edin.
Bir Tankınızın olduğu ve kulesinin belirli bir hedefe veya önceden tanımlanmış bir yerde kalmasını istediğiniz bir AI ajanına bakmaya devam etmesini istediğiniz ve hedef tespit edildiğinde onun ateş etmeye başlamasını istediğiniz bir oyunu düşünelim. Hareket ettiğinde o hedefe göz kulak olmak, kesinlikle AI vizyonunun bir sınırı olmalı veya koni gibi bir bölge tanımlamak isteyebilirsiniz, AAA oyunlarında bir NPC'nin bir koni tanımlaması çok popülerdir. oyuncuya ancak o bölgede tespit edilirse saldırabilir, bakalım bunu nasıl yapabiliriz.
iki vektör arasındaki nokta çarpımı aşağıdaki gibi tanımlanabilir:
Böylece, teta açısını elde etmek için, basitçe ters kosinüs veya iki a ve b vektörünün nokta çarpımının ark kosinüsünü büyüklüklerinin çarpımına bölerek alabiliriz.
İşte birlik 3D'de bir AI görüş hattı "Koni Algılama"nın basit bir uygulaması. Bu arada bu sadece bir açıklamadır, kaynak kodunu ve ilgili tüm proje dosyalarını makalenin sonundaki kaynaklar bölümünde bulabilirsiniz.
Yukarıdaki resimde gördüğünüz gibi hedef NBC'nin arkasında ve NBC ileri vektörü “kırmızı ok” ileri ekseni gösterdiğinden “Unity3D'de bu z eksenleridir” ve yön vektörü “turuncu ok” yönü işaret ediyor. hedef ters yöndedir, bu nedenle NPC'nin arkasında kaldığı sürece hedefi tespit edememesini sağlar, ancak oyununuzda durum buysa, açı teta aralığını 180 dereceye çıkararak bunu yapabilirsiniz. .
yine de ikinci resme bakarsanız, NBC'nin artık oyuncunun görüş aralığında olduğu için oyuncuyu algılayabildiğini ve bir kesme açısı tanımlayarak belirlenebileceğini göreceksiniz, bu durumda varsayılanı yaptım 45 dereceye kadar. Açı, NBC ileri vektöründen yöne hesaplanır; burada yön, hedeften NBC'ye olan mesafedir.
Hedefi tespit ettikten sonra, artık top sizin sahanızdadır, hemen hemen her şeyi yapabilirsiniz, örneğin NBC'yi peşinden koşturabilir, ona saldırabilir, ona bir el bombası fırlatabilir, uzaktan bir ok atabilir veya belki bir yere girebilirsiniz. onunla dövüş, bu basit örnekte, NBC hedefi tespit ettiğinde onu kovalamaya başlar ve oyuncudan kısa bir mesafeye girdiğinde ona saldırmaya başlar (sadece basit bir saldırı animasyonu oynuyor), bu arada, bu küçük mesafe olarak adlandırılan durma mesafesi.
Son olarak, nokta çarpımının en bilinen uygulamalarından biri olan vektör izdüşümünü bir kuvveti bulmak için nasıl kullanabileceğimizden kısaca bahsedeceğim.
Fizikte çok yaygın bir problem, bir arabayı, kayayı veya hatta bir arabayı bir tepeden aşağı yuvarlanmasını durdurmak için ters yönde itmek için ne kadar kuvvete ihtiyacınız olduğunu bulmanız gerektiğidir. Aşağıdaki resme bakın.
İlk olarak, bir vektörün diğerine izdüşümünü bulmak için kullanacağımız formülü görelim.
F vektörünün V vektörüne izdüşümünün basitçe vektör V'nin skaler bir miktarı olduğunu görebilirsiniz. Bu nedenle, gösterildiği gibi arabaya veya V vektörüne uygulanan yerçekimi kuvveti olan F vektörünü yansıtacak olursak resme geri dönelim. koyu mavi okla, V'nin bir birim vektör olduğunu ve bunun yalnızca hesaplamayı basitleştirmek için olduğunu fark etmiş olabilirsiniz, çünkü önceden F vektörünün V'ye izdüşümü, bunun skaler bir miktarıdır ve tüm peşinde olduğumuz şey bu. bu durumda, çünkü ters yönde itmek için istenen büyüklüğü bulmamız gerektiğini unutmayın, bu yüzden vektörleri bir bileşen biçiminde yazarak başlayalım.
F Newton cinsinden yerçekimi kuvvetidir (F = m * a). bu aşağı doğru bir kuvvet olarak yazabiliriz
, V'yi sinüs ve kosinüs şeklinde yazabiliriz, çünkü rampanın veya tepenin 14 derece eğildiğini zaten biliyoruz, böylece
, V vektörü, büyüklüğünün 1'e eşit olduğu bir birim vektördür. İki F ve V vektörünün nokta çarpımını hesaplamanın bir sonucu olarak, -284.5'e eşit bir değer elde ederiz, Son olarak, tüm bu değerleri denklemin içine yerleştirelim. :
F = -284.5 N, arabanın rampadan aşağı yuvarlanmasını durdurmak için gereken doğru kuvvet miktarıdır, Newton'un ikinci yasası 284.5 = m * 9.8'e dönersek, m'yi 29 Kg'a eşitliyoruz, yani buna ihtiyacımız yok 120 Kg'ın tamamı, arabanın rampadan aşağı yuvarlanmasını durdurmak için.
Unity3D'de böyle görünüyor
GitHub → Dot Product üzerindeki kaynak kodu ve ilgili tüm proje dosyaları
Bu blogda, İngilizce'ye yaklaşımımı nasıl ve neden değiştirmeye karar verdiğimi ve yaptığım bazı etkinliklerden para kazanarak bir yıldan kısa bir sürede fakir bir B1'den başlayarak B2 seviyesine nasıl geldiğimi tartışacağım. İçindekiler Okulda örnek bir öğrenci olmasam da İngilizce öğrenmek her zaman kültürel geçmişime eklemek istediğim bir şeydi.
Bazen, Morgan Stanley'de çalışırken, bir çarşamba günü en iyi arkadaşınla yatmak isteyen Dalton adında bir adamla sarhoş olursun. Continental'den çıkıp St.
Bugün farklı bir yolculuğa çıkıyoruz. Çoğunlukla resimler.
Arka hikaye Her ürünün bir hikayesi vardır ve bu Yapdoof'un başlangıç hikayesidir. Yapdoof, Omept Technology Nijerya Limited'in bir ürünüdür.
Angular uygulamanızın bazı bölümlerinin neden hala yavaş olduğunu merak ediyor musunuz? Bu makale, uygulama performansınızı nasıl artırabileceğinizi size gösterecek. Angular uygulamalarınızı gecikmeli ve yavaş buluyor ancak bunları nasıl geliştireceğiniz konusunda hiçbir fikriniz yok mu? Uygulamanızın performansını artırmanın yaklaşık 5 yolunu öğrenmek için doğrudan bu makaleye dalalım.
Amerikalı koşucu Athing Mu, profesyonel kariyerinde ilk kez 800 metrelik bir yarışı kaybedebilirmiş gibi görünüyordu. Mu, tipik olarak, az kol hareketi ve görünüşte az enerji içeren benzersiz ve zahmetsiz bir adımla yarışlarına hükmeder.