1. 程式人生 > >box2d關於投影預瞄準的演算法推演過程

box2d關於投影預瞄準的演算法推演過程

首先, 自己程式很菜, 所以從最初的寫法到最終走了很多彎路, 網上的資料也比較少, 所以還是把想法分享出來

首先說一下前提背景, 我做的是一個球類的遊戲, 有個功能是預判短位置和虛擬路徑的顯示

1.用非box2d來手寫這個, 引擎當然就是自己寫的要你命三千, 各種問題次鞥出不窮, 有問題還不好復現, 這個瞄準是有, 精度就不敢恭維, 原理上就是遞迴運算實際飛行的整個路程, 通過角度來定位, 然後每移動一個位置, 通過精度來調整位移的距離, 來增強檢測的準確性

結果: 越準確就越需要更多運算, 最後精度大概估計在80%吧, 還算滿意

後來用box2d來改寫遊戲, 從下面開始就是各種苦逼嘗試

2.建立一個幽靈球(感應器true), 和正常球一樣的發射角度, 調整發射速度, 來加快整個路徑的形成

結果: 越速度快越快速完成路徑, 更越容易穿透其他球, 導致出現bug, 如果可以忍耐這渣速度的話也可以接收, 精度(100%~0%) 子彈狀態開啟, 如果碰撞是計算的很完美的, 但是穿透就是錯誤, 無法接受錯誤和反應速度

3.射線, 建立一個接近於無限長的射線, 通過射線和整個引擎內的剛體遍歷, 得到最近的剛體碰撞位置(得到的fraction越小就越近), 然後通過運算可以讓其是否反射或直接終止

結果: 發現反射的時候射線是以一個點來實現的, 但是球是有半徑的, 失敗....

4.涉嫌組, 不放棄, 覺得這個方法可行, 於是建立了一個射線組, 來組成球的半徑, 三條射線分別在左側 右側, 和中間, 但發現如果變了個角度, 射線之間的間距會變小, 於是讓三個射線的起點垂直於初始點平行分部, 但是這樣又發現牆壁反射一塌糊塗

結果: 將三條射線放於水平, 然後根據角度來加大射線間的距離, 來保持 平行方向的間距是固定的值(R/cos(a)), 這樣到牆壁, 如果任何一個射線反射, 那麼其他射線也跟著反射, 但是問題又出現了, 三條射線到其他球的時候, 是平行的, 不是球面的, 如果我改變初始的位置為球面的點, 牆壁反射又亂了, 完全陷入崩潰的邊緣

結果: 這個方法如果不反射, 準確率大概在60% , 反射後準確率(60%~0%), 而且由於射線是可以很細, 穿透很容易, 這樣縫隙過去的進行計算就又出現詭異問題

這時候我無奈的上網找問題:

找到這個權威的box2d基礎網站:

https://www.iforce2d.net/b2dtut/

上面有咱們國人的翻譯教程

http://ohcoder.com/blog/categories/box2d-tutorials/

大牛不錯, 留了email, 迅速寫信給他, 我以為收不到, 結果2小時就給我回復, 大致內容:

我已經不再做涉及box2d的專案很久了, 不過給你個參考地址:
https://www.iforce2d.net/b2dtut/projected-trajectory

非常感謝後繼續研究, 恩 不錯 正是我想要的:

5. 也是同樣通過射線, 不過這次射線並不是趨於無限長, 也不用自己去遞迴, box2dworld->RayCast()去處理它就好了, 直接像碰撞事件一樣繫結它就好

注意的是需要在偵聽函式ReportFixture內, 如果已經得到了自己想要的物件, 就直接返回0, 如果返回大於0的值, 則此raycast還會遍歷去查詢, 我就不需要了, 下面講為什麼不需要

直接做個b2vec2的點, 讓它運動起來, 這裡需要微分, 如果需要精確的處理做到1/60s, 我只做了1/10s就足夠了, 並當點更新位置的時候, 以這個點為圓心, 向四周做射線, 射線長度為球的半徑, 如果碰撞產生併合格, 則第一時間處理, 因為是微小射線, 而且是微小位移, 完全沒必要去處理最近碰撞點這個問題

結果: 步長越小, 精確越高, 但是由於需要瞬間走很長一個距離, 所以, 效率會很低, 不需要太精確, 向外射線的個數也不需要太多, 我這裡只做了12條, 也許以周長方向做12條射線更精確一些. 準確率90%+

我的問題迎刃而解 噹噹噹當~~~~

相關推薦

box2d關於投影瞄準演算法過程

首先, 自己程式很菜, 所以從最初的寫法到最終走了很多彎路, 網上的資料也比較少, 所以還是把想法分享出來 首先說一下前提背景, 我做的是一個球類的遊戲, 有個功能是預判短位置和虛擬路徑的顯示 1.用非box2d來手寫這個, 引擎當然就是自己寫的要你命三千, 各種問題次鞥

深度長文 | 從FM各深度CTR估模型(附開原始碼)

作者丨龍心塵 & 寒小陽研究方向丨機器學習,資料探勘題記:多年以後,當資深演算法專家們看

從FM各深度CTR估模型(附程式碼)

宣告:版權所有,轉載請聯絡作者並註明出處。本文程式碼部分參考了lambda等同學的tensorflow實現,在此向原作者表示感謝。 注:本文根據作者在公司內訓講稿整理而成。 多年以後,當資深演算法專家們看著無縫對接使用者需求的廣告收入節節攀升時,他們可能會想起

2星|郎鹹平《馬克思中觀經濟學》:用數學公式資本論,疑似郎的博士生代筆

聯網 afa tps 公眾號 公眾 TP 進口關稅 資本家 學術界 全書是用數學公式推演《資本論》第2、3卷。郎鹹平本人在序言中說這是本學術著作,並且學術地位很高。 書名中的“中觀”是跟“宏觀”“微觀&rdq

快速排序--QuickSort,看完五分彩開獎網平臺搭建自己就能寫出來的快排思路

遞歸 urn 歸並 輔助 dia pre 自己 wap 要花 快速五分彩開獎網平臺搭建論壇:haozbbs.com Q1446595067排序(QuickSort)介紹首先發明者竟然敢給自己發明的算法叫做QuickSort,這個名字閃不閃亮?好比別的武功叫做六脈神劍、降龍十

機器不學習:基於知識圖譜推理的關系

操作 投影 bow 分數 和源 裏的 常見 ati 直接 對於知識圖譜的關註可以分為兩個方面:知識圖譜的構建和基於知識圖譜數據結構的應用。知識圖譜的構建主要關註如何整合結構化、非結構化的數據,實現用統一的語義數據結構如三元組RDF形式的數據存儲。基於知識圖譜的應用主要關註如

c理解提高(5)字串copy函式技術

#include <stdlib.h> #include <string.h> #include <stdio.h> void main01() { //通過棧的方式對資料進行拷貝 char a[] = "i am a student"; char b[6

hashmap 原理

hash演算法查詢的基本思想: 假設存在一種hash演算法,使得每個物件的hash值都不同 那麼給定一個足夠大的陣列,將每個物件儲存在其hash值所對應的下標位置。 這樣再查詢該物件時,只要算出其hash值就可以立刻找到該物件 問

DeepLearning tutorial(2)機器學習演算法在訓練過程中儲存引數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

NDT演算法 matlab實現過程

參考論文:The normal distributions transform: a new approach to laser scan matching 目錄:  1.原理解釋 2.matlab 程式碼 NDT演算法原理

跟隨企業數字化轉型,FIT2CLOUD全棧雲管平臺

(FIT2CLOUD飛致雲CEO 阮志敏) 市場調研公司IDC於近期釋出了全球IT市場十大預測,其中的一大預測為多雲環境已經成為定局:到2024年,9成的全球1000大機構將採用多款雲服務或者混合雲技術和工具,從而減輕對某一雲服務的依賴;同時企業將迎來數字化創新大爆發的時期:從2018-2023年,新開

基於深度學習的廣告CTR演算法

數十款阿里雲產品限時折扣中,趕緊點選這裡,領劵開始雲上實踐吧!   演講嘉賓簡介: 朱小強,花名懷人,阿里媽媽高階演算法專家,領導了核心的排序演算法與機器學習平臺團隊,負責阿里精準展示廣告的CTR/CVR預估系統/演算法

【ML1】機器學習之EM演算法(含演算法詳細推導過程

        寫在前面的話:對於EM演算法(Expectation Maximization Algorithm, 最大期望演算法), 大家如果僅僅是為了使用,則熟悉演算法流程即可。此處的演算法推導過程,僅提供給大家進階 之用。對於其應用,

一方保級準備工作做到空前細緻 幾套方案反覆

11月29日訊息,@北京商報從度小滿金融人士處獲悉,百度正式拿到准許經營證券期貨的許可證。據許可證顯示,機構名稱為北京百度百盈科技有限公司(下稱“百度百盈”),證券期貨業務經營範圍為基金銷售。而今年8月22日,根據北京證監局官網顯示,證監局已核准百度百盈證券投資基金銷售業務資格。 企查查資訊顯示,百度百盈成

聊聊CTR演算法DeepFM

DeepFM這種演算法是一種基於分解機的神經網路,該演算法由哈爾濱工業大學深圳研究生院聯合華為諾亞方舟實驗室於2017年提出的。 這種演算法是一種端到端的學習模型,不僅考慮了低階的特徵融合,也考慮了高階的特徵融合。該演算法利用深度學習來學習特徵,利用分解機做推薦。

為什麼svm演算法在求解過程中,需要將原始問題轉化為對偶問題?

對偶問題將原始問題中的約束轉為了對偶問題中的等式約束 方便核函式的引入 改變了問題的複雜度。由求特徵向量w轉化為求比例係數a,在原始問題下,求解的複雜度與樣本的維度有關,即w的維度。在對偶問題下,只

AI實現的兩種方案,暴力與因果率

AI實現的兩種方案,暴力推演與因果率 學習PYTHON兩個月,寫個小遊戲練手。也為以後找工作做儲備。 從最簡單的九格棋入手。 九格棋玩法簡單,橫向,縱向,斜向三子連線則為勝。 基本設計構件有: 一、GUI介面。 介面我選用PYGAME做的。因為PYGAME中沒有提供按鈕等相關控制

RTMP協議分析及過程

簡介: 1.RTMP(實時訊息傳輸協議)是Adobe 公司開發的一個基於TCP的應用層協議。 2.RTMP協議中基本的資料單元稱為訊息(Message)。 3.當RTMP協議在網際網路中傳輸資料的時候,訊息會被拆分成更小的單元,稱為訊息塊(Chunk)。 RTMP 握手(

氣泡排序演算法 Java 實現過程及詳解

 氣泡排序(Bubble Sort)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”

直播過程詳細分析

直播過程1.相機預覽及資料採集Camera — 取資料(onPreviewFrame(Byte[] rawFrameData, Camera camera)) 2.原始幀處理(Rotate旋轉/Scale縮放:使用Libyuv/FFmpeg等工具庫) 3.編碼器編碼得到相應的