⑴ 3D游戲和2D游戲的製作方面那個難
你說的異常的難是指哪方面?
個人淺見:
2D難在素材和演算法。
比如說isometric對大物體的遮擋關系處理等,3D有了zbuffer,處理起來很簡單,2D演算法雖然速度比3D快,但因為缺少一個維度的數據,不存在完美的演算法,所以處理起來比較復雜。
即便是純2D,素材也是一個問題。因為手繪2D素材需要美術功力,成本比3D要高得多。雖然可以從3D生成2D, 但是可能達不到2D素材的質量。不過因為沒有硬體上的限制,渲染速度快,2D圖形可以做得看起來比3D的更為精美。
如果是引擎上的比較,一般只同2D和3D引擎做得是否易用有關,同2D/3D無關。
⑵ C語言編寫簡單2D游戲
為了實現滑鼠控制飛機飛行,當滑鼠一移動,獲取滑鼠X的坐標,在消息處理函數好尺中加入下列代碼:
x = LOWORD(lParam);
如果滑鼠的X坐標大於窗口臨界值,則X等於臨界值,若滑鼠的X坐標小於0,則將滑鼠X設定為0,加入下列代碼:
if(x
730)
x = 730;
else
if(x
0)
x = 0;
同理,獲取滑鼠的Y坐標,加入如下代碼:
y = HIWORD(lParam);
if(y
480)
y = 480;
else if(y
0)
y = 0;
判斷飛機的移動方向,使飛機的移動方向與滑鼠的移動方向一致,即飛機跟隨著滑鼠的移動而移動,並進行貼圖,加入代碼如下:
if(nowX
x)
{
nowX += 20;
if(nowX
x)
nowX = x;
}
else
{
nowX -=20;
if(nowX
x)
nowX = x;
}
if(nowY
y)
{
nowY += 20;
if(nowY
y)
nowY = y;
}
else
{
nowY -= 20;
if(nowY
y)
nowY = y;
}
SelectObject(bufdc,plane);
BitBlt(mdc,nowX,nowY,70,70,bufdc,0,70,SRCAND);
BitBlt(mdc,nowX,nowY,70,70,bufdc,0,0,SRCPAINT);
3.2.2計算機角色動畫
為了實現游戲畫面的透明效果,載入游戲的石頭點陣圖(」Stone.bmp」)
Stone=(HBITMAP)LoadImage(NULL,"Stone.bmp",IMAGE_BITMAP,100,200,LR_LOADFROMFILE);
其次前景點陣圖的屏蔽圖部分與背景圖作」AND」運算,加入下列代碼:
SelectObject(bufdc,Stone);
BitBlt(mdc,Sx,Sy,100,100,bufdc,0,100,SRCAND);
將」AND」運算的結果與前景圖作」OR」運算,加入下列代碼:
BitBlt(mdc,Sx,Sy,100,100,bufdc,0,0,SRCPAINT);
為了實現游友褲高戲石頭下落效果,定義一個速度VY,並計算Y軸坐標,並不停的往下貼,加入如下代碼:
vy=15;
Sy += vy;
為了實現多個石頭下落效果,定義石頭坐標Sx1,Sx2,Sx3,Sy1,Sy2,Sy3,分別表示四個石頭下落的坐標值,通過如上代碼所示載入、實現透明並掉落。
3.2.3星際迷航背景動畫
為了實現背景動畫的滾動效果,設定一個間隔時間tPre以及圖片寬度W代碼實現如下
BitBlt(hdc,0,0,800,600,mdc,0,0,SRCCOPY);
tPre = GetTickCount();
w +=10;
if(w=600)
w = 0;
其中tPre獲取時間,圖片的隨著時間Y坐標不斷增加10,如果當整個圖片(圖片大小為800*600)600的話,則將圖片重新滾動一遍。
4、物理現象
為了實現整個游戲的碰撞效果的物理現象,首先載入游戲的石頭點陣圖
baozha0=(HBITMAP)LoadImage(NULL,"baozha0.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);
baozha1=(HBITMAP)LoadImage(NULL,"baozha1.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);
baozha2=(HBITMAP)LoadImage(NULL,"baozha2.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);
baozha3=(HBITMAP)LoadImage(NULL,"baozha3.bmp",IMAGE_BITMAP,316,632,LR_LOADFROMFILE);
對於碰純世撞效果,採取臨界值碰撞來實現,Sx1和Sy1為石頭1的坐標,X和Y為滑鼠的坐標,當飛機的坐標和石頭的坐標達到臨界值的時候,產生碰撞,相關代碼如下:
SelectObject(bufdc,baozha0);
{
if(((Sx1x))((Sy1y)))
{
BitBlt(mdc,Sx1-50,Sy1-70,316,316,bufdc,0,316,SRCAND);
BitBlt(mdc,Sx1-50,Sy1-70,316,316,bufdc,0,0,SRCPAINT);
DeleteDC(bufdc);
}}
5、實驗結果及分析
本實驗實現了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現象設計原理。優點:初步實現了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現象設計基本功能。缺點:因時間及數據結構演算法沒有學好所以未實現子彈與石頭碰撞效果,爆炸效果不逼真,貼圖效果不好。
6、結論
這個程序的架構仍顯笨拙,有很多不如意的地方,但是實現了游戲畫面繪制貼圖、游戲輸入消息處理、游戲動畫技巧、游戲物理現象設計原理。雖然整個游戲不能像紅白機一樣內容豐富,但是以後會把它設計得簡潔、優雅,以至於可以把它做成一個像《雷電》一樣精彩的飛行射擊游戲。
⑶ 現在的自動駕駛處理的是2d還是3d
環境感知是自動駕駛的第一環,是車輛和環境交互的紐帶。一個自動駕駛系統整體表現的好壞,很大程度上都取決於感知系統的好壞。目前,環境感知技術有兩大主流技術路線:
①以視覺為主導的多感測頃毀器融合方案,典型代表是特斯拉;
②以激光雷達為主導,其他感測器為輔助的技術方案,典型代表如谷歌、網路等。
我們將圍繞著環境感知中關鍵的視覺感知演算法進行介紹,其任務涵蓋范圍及其所屬技術領域如下圖所示。我們在下文分別梳理了2D和3D視覺感知演算法的脈絡和方向。
2D視覺感知
本節我們先從廣泛應用於自動駕駛的幾個任務出發介紹2D視覺感知演算法,包括基於圖像或視頻的2D目標檢測和跟蹤,以及2D場景的語義分割。近些年,深度學習滲透到視覺感知的各個領域,取得不錯的成績,因此,我們梳理了一些經典的深度學習演算法。
1.目標檢測
1.1 兩階段檢測
兩階段指的是實現檢測的方式有先後兩個過程,一是提取物體區域;二是對區域進行CNN分類識別;因此,「兩階段」又稱基於候選區域(Region proposal)的目標檢測。代表性演算法有R-CNN系列(R-CNN、Fast R-CNN、Faster R-CNN)等。
Faster R-CNN是第一個端到端的檢測網路。第一階段利用一個區域候選網路(RPN)在特徵圖的基礎上生成候選框,使用ROIPooling對齊候選特徵的大小;第二階段用全連接層做細化分類和回歸。這里提出了Anchor的思想,減少運算難度,提高速度。特徵圖的每個位置會生成不同大小、長寬比的Anchor,用來作為物體框回歸的參考。Anchor的引入使得回歸任務只用處理相對較小的變化,因此網路的學習會更加容易。下圖是Faster R-CNN的網路結構圖。
CascadeRCNN第一階段和Faster R-CNN完全一樣,第二階段使用多個RoiHead層進行級聯。後續的一些工作多是圍繞著上述網路的一些改進或者前人工作的雜燴,罕有突破性提升。
1.2 單階段檢測
相較於兩階段演算法,單階段演算法只需一次提取特徵即可實現目標檢測,其速度演算法更快,一般精度稍微低一些。這類演算法的開山之作是YOLO,隨後SSD、Retinanet依次對其進行了改進,提出YOLO的團隊將這些有助於提升性能的trick融入到YOLO演算法中,後續又提出了4個改進版本YOLOv2~YOLOv5。盡管預測准確率不如雙階段目標檢測演算法,由於較快的運行速度,YOLO成為了工業界的主流。下圖是YOLO v3的網路結構圖。
1.3 Anchor-free檢測(無Anchor檢測)
這類方法一般是將物體表示為一些關鍵點,CNN被用來回歸這些關鍵點的位置。關鍵點可以是物體框的中心點(CenterNet)、角點(CornerNet)或者代表點(RepPoints)。CenterNet將目標檢測問題轉換成中心點預測問題,即用目標的中心點來表示該目標,並通過預測目標中心點的偏移量與寬高來獲取目標的矩形框。Heatmap表示分類信息,每一個類別將會產生一個單獨的Heatmap圖。對於每張Heatmap圖而言,當某個坐標處包含目標的中心點時,則會在該目標處雀手備產生一個關鍵點,我們利用高斯圓來表示整個關鍵點,下圖展示了具體的細節。
RepPoints提出將物體表示為一個代表性點集,並且通過可變形卷積來適應物體的形狀變化。點集最後被轉換為物體框,用於計算與手工標注的差異。
1.4 Transformer檢測
無論是單階段還是兩階段目標檢測,無論採用Anchor與否,都沒有很好地利用到注意力機制。針對這種情況,Relation Net和DETR利用Transformer將注意力機制引入到目標檢測領域。Relation Net利用Transformer對不同目標之間的關系建模,在特徵之中融入了關系信息,實現了特徵增強。DETR則是基於Transformer提出了全新的目標檢測架構,開啟了目標檢測的新時代,下圖是DETR的演算法流程,先採用CNN提取圖像特徵,然後用Transformer對全局的空間關系進行建模,最後得到的輸出通過二分圖匹配演算法與手工標注進行匹配。
下表中的准確度採用MS COCO資料庫上的mAP作為指標,而速度則採用FPS來衡量,對比了上述部分演算法,由於網路的結構設計薯伍中存在很多不同的選擇(比如不同的輸入大小,不同的Backbone網路等),各個演算法的實現硬體平台也不同,因此准確率和速度並不完全可比,這里只列出來一個粗略的結果供大家參考。
2.目標跟蹤
在自動駕駛應用中,輸入的是視頻數據,需要關注的目標有很多,比如車輛,行人,自行車等等。因此,這是一個典型的多物體跟蹤任務(MOT)。對於MOT任務來說,目前最流行的框架是Tracking-by-Detection,其流程如下:
①由目標檢測器在單幀圖像上得到目標框輸出;
②提取每個檢測目標的特徵,通常包括視覺特徵和運動特徵;
③根據特徵計算來自相鄰幀的目標檢測之間的相似度,以判斷其來自同一個目標的概率;
④將相鄰幀的目標檢測進行匹配,給來自同一個目標的物體分配相同的ID。
深度學習在以上這四個步驟中都有應用,但是以前兩個步驟為主。在步驟1中,深度學習的應用主要在於提供高質量的目標檢測器,因此一般都選擇准確率較高的方法。SORT是基於Faster R-CNN的目標檢測方法,並利用卡爾曼濾波演算法+匈牙利演算法,極大提高了多目標跟蹤的速度,同時達到了SOTA的准確率,也是在實際應用中使用較為廣泛的一個演算法。在步驟2中,深度學習的應用主要在於利用CNN提取物體的視覺特徵。DeepSORT最大的特點是加入外觀信息,借用了ReID模塊來提取深度學習特徵,減少了ID switch的次數。整體流程圖如下:
此外,還有一種框架Simultaneous Detection and Tracking。如代表性的CenterTrack,它起源於之前介紹過的單階段無Anchor的檢測演算法CenterNet。與CenterNet相比,CenterTrack增加了前一幀的RGB圖像和物體中心Heatmap作為額外輸入,增加了一個Offset分支用來進行前後幀的Association。與多個階段的Tracking-by-Detection相比,CenterTrack將檢測和匹配階段用一個網路來實現,提高了MOT的速度。
3.語義分割
在自動駕駛的車道線檢測和可行駛區域檢測任務中均用到了語義分割。代表性的演算法有FCN、U-Net、DeepLab系列等。DeepLab使用擴張卷積和ASPP(Atrous Spatial Pyramid Pooling )結構,對輸入圖像進行多尺度處理。最後採用傳統語義分割方法中常用的條件隨機場(CRF)來優化分割結果。下圖是DeepLab v3+的網路結構。
近些年的STDC演算法採用了類似FCN演算法的結構,去掉了U-Net演算法復雜的decoder結構。但同時在網路下采樣的過程中,利用ARM模塊不斷地去融合來自不同層特徵圖的信息,因此也避免了FCN演算法只考慮單個像素關系的缺點。可以說,STDC演算法很好的做到了速度與精度的平衡,其可以滿足自動駕駛系統實時性的要求。演算法流程如下圖所示。
3D視覺感知
本節我們將介紹自動駕駛中必不可少的3D場景感知。因為深度信息、目標三維尺寸等在2D感知中是無法獲得的,而這些信息才是自動駕駛系統對周圍環境作出正確判斷的關鍵。想得到3D信息,最直接的方法就是採用激光雷達(LiDAR)。但是,LiDAR也有其缺點,比如成本較高,車規級產品量產困難,受天氣影響較大等等。因此,單純基於攝像頭的3D感知仍然是一個非常有意義和價值的研究方向,接下來我們梳理了一些基於單目和雙目的3D感知演算法。
1.單目3D感知
基於單攝像頭圖像來感知3D環境是一個不適定問題,但是可以通過幾何假設(比如像素位於地面)、先驗知識或者一些額外信息(比如深度估計)來輔助解決。本次將從實現自動駕駛的兩個基本任務(3D目標檢測和深度估計)出發進行相關演算法介紹。
1.1 3D目標檢測
表示轉換(偽激光雷達):視覺感測器對周圍其他車輛等的檢測通常會遇到遮擋、無法度量距離等問題,可以將透視圖轉換成鳥瞰圖表示。這里介紹兩種變換方法。一是逆透視圖映射(IPM),它假定所有像素都在地面上,並且相機外參准確,此時可以採用Homography變換將圖像轉換到BEV,後續再採用基於YOLO網路的方法檢測目標的接地框。二是正交特徵變換(OFT),利用ResNet-18提取透視圖圖像特徵。然後,通過在投影的體素區域上累積基於圖像的特徵來生成基於體素的特徵。然後將體素特徵沿垂直方向折疊以產生正交的地平面特徵。最後,用另一個類似於ResNet的自上而下的網路進行3D目標檢測。這些方法只適應於車輛、行人這類貼地的目標。對於交通標志牌、紅綠燈這類非貼地目標來說,可以通過深度估計來生成偽點雲,進而進行3D檢測。Pseudo-LiDAR先利用深度估計的結果生成點雲,再直接應用基於激光雷達的3D目標檢測器生成3D目標框,其演算法流程如下圖所示,
關鍵點和3D模型:待檢測目標如車輛、行人等其大小和形狀相對固定且已知,這些可以被用作估計目標3D信息的先驗知識。DeepMANTA是這個方向的開創性工作之一。首先,採用一些目標檢測演算法比如Faster RNN來得到2D目標框,同時也檢測目標的關鍵點。然後,將這些2D目標框和關鍵點與資料庫中的多種3D車輛CAD模型分別進行匹配,選擇相似度最高的模型作為3D目標檢測的輸出。MonoGRNet則提出將單目3D目標檢測分成四個步驟:2D目標檢測、實例級深度估計、投影3D中心估計和局部角點回歸,演算法流程如下圖所示。這類方法都假設目標有相對固定的形狀模型,對於車輛來說一般是滿足的,對於行人來說就相對困難一些。
2D/3D幾何約束:對3D中心和粗略實例深度的投影進行回歸,並使用這二者估算粗略的3D位置。開創性的工作是Deep3DBox,首先用2D目標框內的圖像特徵來估計目標大小和朝向。然後,通過一個2D/3D的幾何約束來求解中心點3D位置。這個約束就是3D目標框在圖像上的投影是被2D目標框緊密包圍的,即2D目標框的每條邊上都至少能找到一個3D目標框的角點。通過之前已經預測的大小和朝向,再配合上相機的標定參數,可以求解出中心點的3D位置。2D和3D目標框之間的幾何約束如下圖所示。Shift R-CNN在Deep3DBox的基礎上將之前得到的2D目標框、3D目標框以及相機參數合並起來作為輸入,採用全連接網路預測更為精確的3D位置。
直接生成3DBox:這類方法從稠密的3D目標候選框出發,通過2D圖像上的特徵對所有的候選框進行評分,評分高的候選框即是最終的輸出。有些類似目標檢測中傳統的滑動窗口方法。代表性的Mono3D演算法首先基於目標先驗位置(z坐標位於地面)和大小來生成稠密的3D候選框。這些3D候選框投影到圖像坐標後,通過綜合2D圖像上的特徵對其進行評分,再通過CNN再進行二輪評分得到最終的3D目標框。M3D-RPN是一種基於Anchor的方法,定義了2D和3D的Anchor。2D Anchor通過圖像上稠密采樣得到,3D Anchor是通過訓練集數據的先驗知識(如目標實際大小的均值)確定的。M3D-RPN還同時採用了標准卷積和Depth-Aware卷積。前者具有空間不變性,後者將圖像的行(Y坐標)分成多個組,每個組對應不同的場景深度,採用不同的卷積核來處理。上述這些稠密采樣方法計算量非常大。SS3D則採用更為高效的單階段檢測,包括用於輸出圖像中每個相關目標的冗餘表示以及相應的不確定性估計的CNN,以及3D邊框優化器。FCOS3D也是一個單階段的檢測方法,回歸目標額外增加了一個由3D目標框中心投影到2D圖像得到的2.5D中心(X,Y,Depth)。
1.2 深度估計
不管是上述的3D目標檢測還是自動駕駛感知的另一項重要任務——語義分割,從2D擴展到3D,都或多或少得應用到了稀疏或稠密的深度信息。單目深度估計的重要性不言而喻,其輸入是一張圖像,輸出是相同大小的一張由每個像素對應的場景深度值組成的圖像。輸入也可以是視頻序列,利用相機或者物體運動帶來的額外信息來提高深度估計的准確度。
相比於監督學習,單目深度估計的無監督方法無需構建極具挑戰性的真值數據集,實現難度更小。單目深度估計的無監督方法可分為基於單目視頻序列和基於同步立體圖像對兩種。前者是建立在運動相機和靜止場景的假設之上的。在後者的方法中,Garg等人首次嘗試使用同一時刻立體校正後的雙目圖像對進行圖像重建,左右視圖的位姿關系通過雙目標定得到,獲得了較為理想的效果。在此基礎上,Godard等人用左右一致性約束進一步地提升了精度,但是,在逐層下采樣提取高級特徵來增大感受野的同時,特徵解析度也在不斷下降,粒度不斷丟失,影響了深度的細節處理效果和邊界清晰度。為緩解這一問題,Godard等人引入了全解析度多尺度的損失,有效減少了低紋理區域的黑洞和紋理復制帶來的偽影。但是,這對精度的提升效果仍是有限的。
最近,一些基於Transformer的模型層出不窮,旨於獲得全階段的全局感受野,這也非常適用於密集的深度估計任務。有監督的DPT中就提出採用Transformer和多尺度結構來同時保證預測的局部精確性和全局一致性,下圖是網路結構圖。
2.雙目3D感知
雙目視覺可以解決透視變換帶來的歧義性,因此從理論上來說可以提高3D感知的准確度。但是雙目系統在硬體和軟體上要求都比較高。硬體上來說需要兩個精確配準的攝像頭,而且需要保證在車輛運行過程中始終保持配準的正確性。軟體上來說演算法需要同時處理來自兩個攝像頭的數據,計算復雜度較高,演算法的實時性難以保證。與單目相比,雙目的工作相對較少。接下來也同樣從3D目標檢測和深度估計兩方面進行簡單介紹。
2.1 3D目標檢測
3DOP是一個兩階段的檢測方法,是Fast R-CNN方法在3D領域的拓展。首先利用雙目圖像生成深度圖,將深度圖轉化為點雲後再將其量化為網格數據結構,再以此為輸入來生成3D目標的候選框。與之前介紹的Pseudo-LiDAR類似,都是將稠密的深度圖(來自單目、雙目甚至低線數LiDAR)轉換為點雲,然後再應用點雲目標檢測領域的演算法。DSGN利用立體匹配構建平面掃描體,並將其轉換成3D幾何體,以便編碼3D幾何形狀和語義信息,是一個端到端的框架,可提取用於立體匹配的像素級特徵和用於目標識別的高級特徵,並且能同時估計場景深度和檢測3D目標。Stereo R-CNN擴展了 Faster R-CNN 用於立體輸入,以同時檢測和關聯左右視圖中的目標。在RPN之後增加額外的分支來預測稀疏的關鍵點、視點和目標尺寸,並結合左右視圖中的2D邊界框來計算粗略的3D目標邊界框。然後,通過使用左右感興趣區域的基於區域的光度對齊來恢復准確的3D邊界框,下圖是它的網路結構。
2.2 深度估計
雙目深度估計的原理很簡單,就是根據左右視圖上同一個3D點之間的像素距離d(假設兩個相機保持同一高度,因此只考慮水平方向的距離)即視差,相機的焦距f,以及兩個相機之間的距離B(基線長度),來估計3D點的深度,公式如下,估計出視差就可以計算出深度。那麼,需要做的就是為每個像素點在另一張圖像上找出與之匹配的點。
對於每一個可能的d,都可以計算每個像素點處的匹配誤差,因此就得到了一個三維的誤差數據Cost Volume。通過Cost Volume,我們可以很容易得到每個像素處的視差(對應最小匹配誤差的d),從而得到深度值。MC-CNN用一個卷積神經網路來預測兩個圖像塊的匹配程度,並用它來計算立體匹配成本。通過基於交叉的成本匯總和半全局匹配來細化成本,然後進行左右一致性檢查以消除被遮擋區域中的錯誤。PSMNet提出了一個不需要任何後處理的立體匹配的端到端學習框架,引入金字塔池模塊,將全局上下文信息納入圖像特徵,並提供了一個堆疊沙漏3D CNN進一步強化全局信息。下圖是其網路結構。
轉載自智車科技,文中觀點僅供分享交流,不代表本公眾號立場,如涉及版權等問題,請您告知,我們將及時處理。
-- END --
⑷ R數據可視化: PCA和PCoA圖, 2D和3D
主成分分析(Principal Components Analysis,PCA) ,也稱主分量分析或主成分回歸分析法,是一種無監督的數據降維方法。PCA通過線性變換將原始數據變換為一組各維度線性無關的表示,可用於提取數據的主要特徵分量,常用於高維數據的 降維 。這種降維的思想首先減少數據集的維數,同時還保持數據集的對方差貢獻最大的特徵,最終使數據直觀呈現在二維坐標系。
直觀上,第一主成分軸 優於 第二主成分軸,具有最大可分性。
主坐標分析(Principal Coordinates Analysis,PCoA),即經典多維標度(Classical multidimensional scaling),用於研究數據間的相似性。
主成分分析(Principal components analysis,PCA)是一種統計分析、簡化數據集的方法。它利用正交變換來對一系列可能相關的變數的觀測值進行線性變換,從而投影為一系列線性不相關變數的值,這些不相關變數稱為主成分(Principal Components)。具體地,主成分可以看做一個線性方程,其包含一系列線性系數來指示投影方向(如圖)。PCA對原始數據的正則化或預處理敏感(相對縮放)。PCA是最簡單的以特徵量分析多元統計分布的方法。通常情況下,這種運算可以被看作是揭露數據的內部結構,從而更好的解釋數據的變數的方法。
主坐標分析(Principal Coordinates Analysis,PCoA),即經典多維標度(Classical multidimensional scaling),用於研究數據間的相似性。PCoA與PCA都是降低數據維度的方法,但是差異在在於PCA是基於原始矩陣,而PCoA是基於通過原始矩陣計算出的距離矩陣。因此,PCA是盡力保留數據中的變異讓點的位置不改動,而PCoA是盡力保證原本的距離關系不發生改變,也就是使得原始數據間點的距離與投影中即結果中各點之間的距離盡可能相關(如圖)。
R中有很多包都提供了PCA和PCoA,比如常用的ade4包。本文將基於該包進行PCA和PCoA的分析,數據是自帶的deug,該數據提供了104個學生9門課程的成績(見截圖)和綜合評定。綜合評定有以下幾個等級:A+,A,B,B-,C-,D。
讓我們通過PCA和PCoA來看一看這樣的綜合評定是否合理,是否確實依據這9門課把這104個學生合理分配到不同組(每個等級一個組)。
前文已經介紹了PCA是基於原始數據,所以直接進行PCA分析即可。相信大家都比較熟悉散點圖的繪制方法,這里不再細講,PCA分析完畢後我們直接作圖展示結果。
整體看起來還不錯,就是B-和C-的學生似乎難以區分。
有時候PCA和PCoA的結果差不多,有時候某種方法能夠把樣本有效分開而另一種可能效果不佳,這些都要看樣本數據的特性。
除轉錄組研究以外,在16S微生物的研究中我們會根據物種豐度的文件對數據進行PCA或者PCoA分析,也是我們所說的β多樣性分析。根據PCA或者PCoA的結果看感染組和對照組能否分開,以了解微生物組的總體變化情況。
β多樣性分析的概念
Beta多樣性指的是樣本間多樣性。在腸道菌群分析中,Beta多樣性是衡量個體間微生物組成相似性的一個指標。通過計算樣本間距離可以獲得β多樣性計算矩陣,後續一般會利用PCoA、進化樹聚類等分析對此數值關系進行圖形展示。主要基於OTU的群落比較方法,有歐式距離、bray curtis距離、Jaccard 距離,這些方法優勢在於演算法簡單,考慮物種豐度(有無)和均度(相對豐度),但其沒有考慮OTUs之間的進化關系,認為OTU之間不存在進化上的聯系,每個OTU間的關系平等。另一種演算法Unifrac距離法,是根據系統發生樹進行比較,並根據16s的序列信息對OTU進行進化樹分類, 一般有加權和非加權分析。
QIIME2中重要的Beta多樣性指數:
Jaccard距離:群落差異的定性度量,即只考慮種類,不考慮豐度。
Bray-Curtis距離:群落差異的定量度量,較常用。
Unweighted UniFrac距離:包含特徵之間的系統發育關系的群落差異定性度量。
Weighted UniFrac距離:包含特徵之間的系統發育關系的群落差異定量度量。
解壓縮通過qiime2輸出的 .qza文件,獲得繪圖的matrix和pcoa結果文件
將pcoa結果整理成下表,保存為 ***_site.txt
注意沒有legend,需要AI加入。
後期需要繼續摸索,其實可以加legend的,只是目前自己的技術做不到。。。
PCA思想解析:
https://www.jianshu.com/p/09bae5cbdc53
⑸ 各種類型的2D游戲里一般要用到什麼復雜的演算法
游戲類型(Game Genres),通常用於分類電子游戲,是一種分辨游戲之間區別的方法。世界上並沒有統一的分類方法。游戲類型主要分為6類:動作、冒險、模擬、角色扮演、休閑、體育,他們各有幾十種分支,形成了龐大的「游戲類型樹」。 電子游戲分類 RPG=Role-playing Game:角色扮演游戲 由玩家扮演游戲中的一個或數個角色,有完整的故事情節的游戲。玩家可能會與冒險類游戲混淆,其實區分很簡單,RPG游戲更強調的是劇情發展和個人體驗,一般來說,RPG可分為日式和美式兩種,主要區別在於文化背景和戰斗方式。日式RPG多採用回合制或半即時制戰斗,如《最終幻想》系列,大多國產中文 RPG也可歸為日式RPG之列,如大家熟悉的《仙劍》、《劍俠》等;美式RPG如《暗黑破壞神》系列。 ACT=Action Game:動作游戲 玩家控制游戲人物用各種武器消滅敵人以過關的游戲,不追求故事情節,如熟悉的《超級瑪里》、可愛的《星之卡比》、華麗的《波斯王子》等等。電腦上的動作游戲大多脫胎於早期的街機游戲和動作游戲如《魂斗羅》、《三國志》、《鬼泣》系列等,設計主旨是面向普通玩家,以純粹的娛樂休閑為目的,一般有少部分簡單的解謎成份,操作簡單,易於上手,緊張刺激,屬於「大眾化」游戲。 AVG=Adventure Game:冒險游戲 由玩家控制游戲人物進行虛擬冒險的游戲。與RPG不同的是,AVG的特色是故事情節往往是以完成一個任務或解開某些迷題的形式出現的,而且在游戲過程中刻意強調謎題的重要性。AVG也可再細分為動作類(AAG)和解迷類兩種,動作類AVG(AAG)可以包含一些格鬥或射擊成分如《生化危機》系列、《古墓麗影》系列、《恐龍危機》等;而解迷類AVG則純粹依靠解謎拉動劇情的發展,難度系數較大,代表是超經典的《神秘島》系列。 AAG=Act Adventure Game:動作冒險游戲 為冒險游戲的一個分支。但非常流行,自成一體,大有超過圖形類AVG之勢。故單獨列出。 SLG=Simulation Game:策略游戲 玩家運用策略與電腦或其它玩家較量,以取得各種形式勝利的游戲,或統一全國,或開拓外星殖民地。策略游戲可分為回合制和即時制兩種,回合制策略游戲如大家喜歡的《三國志》系列、《櫻花大戰》系列;即時制策略游戲如《命令與征服》系列、《帝國》系列、《沙丘》等。後來有些媒體將細分出模擬經營,即SIM(simulation)類游戲,如《模擬人生》、《模擬城市》、《過山車大亨》、《主題公園》等。TCG(養成類)游戲,比如《明星志願》等。 SRPG=Simulation Role-playing Game:戰略類角色扮演 原本角色扮演和戰略應該不能結合,但是如《火焰紋章》之類的游戲,因為操控小隊進行大地圖回合制戰斗極具戰略型(還因此被稱為戰棋類游戲)而且對人物進行培養扮演參與劇情也是很重要的游戲內容因此被玩家劃歸為是SRPG,可以說喜歡玩的人不多,人氣不夠。 RTS=Real-Time Strategy Game:即時戰略游戲 本來屬於策略游戲SLG的一個分支,但由於其在世界上的迅速風靡,使之慢慢發展成了一個單獨的類型,知名度甚至超過了SLG,有點像現在國際足聯和國際奧委會的關系。代表作有《紅色警戒》系列、《魔獸爭霸》系列、《帝國時代》系列、《星際爭霸》等等。後來,從其上又衍生出了所謂「即時戰術游戲」,多以控制一個小隊完成任務的方式,突出戰術的作用,以《盟軍敢死隊》為代表。 FTG=Fighting Game:格鬥游戲 由玩家操縱各種角色與電腦或另一玩家所控制的角色進行格鬥的游戲。按呈畫技術可再分為2D和3D兩種,2D格鬥游戲有著名的《街霸》系列、《侍魂》系列、《拳皇》系列等;3D格鬥游戲如《鐵拳》、《高達格鬥》等。此類游戲談不上什麼劇情,最多有個簡單的場景設定,或背景展示,場景、人物、操控等也比較單一,但操作難度較大,主要依靠玩家迅速的判斷和微操作取勝。 STG= Shooting Game:射擊類游戲 這里所說的射擊類,並非是類似《VR特警》的模擬射擊(槍戰),而是指純的飛機射擊,由玩家控制各種飛行物(主要是飛機)完成任務或過關的游戲。此類游戲分為兩種,一叫科幻飛行模擬游戲(Science-Simulation Game),非現實的,想像空間為內容,如《自由空間》、《星球大戰》系列等;另一種叫真實飛行模擬游戲(Real- Simulation Game),以現實世界為基礎,以真實性取勝,追求擬真,達到身臨其境的感覺,如《Lockon》系列、《DCS》、《蘇-27》等等。 FPS=First Personal Shooting Game:第一人稱視角射擊游戲 嚴格來說它是屬於動作游戲的一個分支,但和RTS一樣,由於其在世界上的迅速風靡,使之展成了一個單獨的類型,典型的有使命召喚系列、DOOM系列、QUAKE系列、《虛幻》、《半條命》、《CS》……不勝枚舉。 PZL=Puzzle Game:益智類游戲 Puzzle的原意是指以前用來培養兒童智力的拼圖游戲,引申為各類有趣的益智游戲,總的來說適合休閑,最經典的嘛~就是大家耳熟能詳的《俄羅斯方塊》。 體育競技 模擬各種體育賽事的游戲。比如《實況足球》等。 RCG=Racing Game:競速游戲[也有稱作為RAC的] 在電腦上模擬各類賽車運動的游戲,通常是在比賽場景下進行,非常講究圖像音效技術,往往是代表電腦游戲的尖端技術。驚險刺激,真實感強,深受車迷喜愛,代表作有《極品飛車》、《山脊賽車》、《摩托英豪》等。另一種說法稱之為「Driving Game」。目前,RCG內涵越來越豐富,出現了另一些其他模式的競速游戲,如賽艇的,賽馬等。 CAG=Card Game:卡片游戲 玩家操縱角色通過卡片戰斗模式來進行的游戲。豐富的卡片種類使得游戲富於多變化性,給玩家無限的樂趣,代表作有著名的《游戲王》系列,包括卡片中國游《武俠Online》,從廣意上說《王國之心》也可以歸於此類。 TAB=Table Game:桌面游戲 顧名思義,是從以前的桌面游戲脫胎到電腦上的游戲,如各類強手棋(即擲骰子決定移動格數的游戲),經典的如《大富翁》系列;棋牌類游戲也屬於TAB,如《拖拉機》、《紅心大戰》、《麻將》等等。 MSC=Music Game∶音樂游戲 培養玩家音樂敏感性,增強音樂感知的游戲。伴隨美妙的音樂,有的要求玩家翩翩起舞,有的要求玩家手指體操,例如大家都熟悉的跳舞機,就是個典型,目前的人氣中國游《勁樂團》也屬其列。 WAG=Wap Game:手機游戲 目前游戲隨處可以玩,連手機也必帶休閑游戲,中國民最喜歡手機游戲的種類,益智類比率最高,其次依次為動作類、戰略類、模擬類、射擊類。列舉幾個手機游戲例子:《金屬咆哮》、《FF7 前傳》等。 MUD=泥巴游戲 主要是依靠文字進行游戲的游戲,圖形作為輔助。1978年,英國埃塞克斯大學的羅伊?特魯布肖用DEC-10編寫了世界上第一款MUD游戲—— 「MUD1」,是第一款真正意義上的實時多人交互中國絡游戲,這是一個純文字的多人世界。(這可能就是MUD的命名來源吧)其他代表作有:《俠客行》、《子午線59》、《萬王之王》