我在用vc,通過基本的點、線、面函式畫了基本的圖形之后,這些畫成的圖形是一個幾何體。這個幾何體的操作,比如說我畫了一個矩形框,再畫一個圓,如果兩個圖形線相交,如何確定是組合到一起了?比如這個邊界,可以把這兩個圖形組合到一起。
uj5u.com熱心網友回復:

涉及到數學建模了。。
實作一些檢測函式。 矩形框,圓,三角形,物件可以相互測驗是否相交(碰撞檢測),并回傳交點/接觸面之類。
一般游戲都是簡單的包圍盒box,和建筑box,人box碰撞。
偷懶可以用下box2d試試。
Box2D是一個用于模擬2D剛體物體的C++引擎。zlib許可是一個自由軟體授權協議,但并非copyleft。
例如:寫個桌球游戲,用2d物理引擎就可以了。
uj5u.com熱心網友回復:
我的圖形是這樣的:

通過基本的畫圖形畫了基本幾何圖形,如果畫了兩個幾何圖形,如何組合到一起?
uj5u.com熱心網友回復:
看你資料結構怎么實作。。一個可行的方法是:● 設定一個所有圖形的基類BaseGraph,所有圖形都派生自該類。
● 建立各種圖形的子類,比如直線類、圓弧類;
● 建立特殊的節點:融合節點類,其內部可容納其他圖形類。
● 用一個容器放置這些節點,在視窗需要重繪時,首先刪選在視圖內的節點(不可見節點不需要繪制),然后實施重繪。。
偽代碼:
public abstract class BaseGraph
{
public Rectange localRect { get; set; } = Vector2.Zero; // 相對父節點的坐標
public Rectangle worldRect // 視圖坐標系坐標
{
get{ return LocalRectangleToWorldRectangle( localRect ); }
set { localRect = WorldRectangleToLocalRectangle( value ); }
}
public BaseGrpah Parent {get;set;} = null; // 父節點
public abstract void OnDraw(); // 繪制
public Rectangle LocalRectangleToWorldRectangle( Rectangle rc ); // 本地坐標轉換為世界坐標
public Rectangle WorldRectangleToLocalRectangle( Rectangle rc ); // 世界坐標轉換為本地坐標
}
public class Line : BaseGraph
{
public overwrite void OnDraw()
{
DrawLine( worldRect.left, worldRect.top, worldRect.right, worldRect.bottom );
}
}
...................其他節點.............
public class CombinNode: BaseGraph
{
List<BaseGraph> childrens ;
public void AddChildren( BaseGraph node )
{
node.parent = this;
childrens.add( node );
}
public overrite void OnDraw()
{
foreach( var node in childrens )
{
node.OnDraw();
}
}
}
// ...........................................
uj5u.com熱心網友回復:
學習一下OpenGL,可以參考OpenFlight, OSG等
uj5u.com熱心網友回復:
OpenFlight是干嘛得?
uj5u.com熱心網友回復:
矢量圖形處理集,參考www.52vr.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/10508.html
標籤:圖形處理/算法
