2017-04-25 15 views
0

2Dカプセルで「ヒット」を数学的に定義して検出する方法を学習しようとしています。2Dカプセルまたはスウィープ球の衝突検出

私は2Dサークルのヒットを定義して検出しています。ここに私のクラスがあります:

class Circle 
{ 
    private double xpos; 
    private double ypos; 
    private double radius; 

    public Circle(double x, double y, double r) 
    { 
     xpos = x; 
     ypos = y; 
     radius = r; 
    } 

    public bool HitCircle(double x, double y) 
    { 
     bool hit = false; 

     double distance = Math.Pow(x - xpos, 2) + Math.Pow(y - ypos, 2);   
     if (distance <= radius * radius) hit = true; 

     return hit; 
    } 
} 

円は、xとyの位置と半径です。 HitCircle関数は、距離式のC#実装です。私は理解を助け、カプセルクラスのHitCapsule関数の計算を実施する必要

class Capsule 
{ 
    double x1pos; 
    double y1pos; 
    double x2pos; 
    double y2pos; 
    double radius; 

    public Capsule(double x1, double y1, double x2, double y2, double r) 
    { 
     x1pos = x1; 
     y1pos = y1; 
     x2pos = x2; 
     y2pos = y2; 
     radius = r; 
    } 

    public bool HitCapsule(double x, double y) 
    { 
     bool hit = false; 
     //?? This is where I need help 
     return hit; 
    } 
} 

カプセルは4点と半径として定義されます。

私が理解しているように、カプセルは円のようなものですが、1点の周りに半径を持つ代わりに、線分の周りに半径を持っています。

今のところ、私はちょうどこれらの幾何学的定義のいくつかの周りに私の脳をラップしようとしています。私はこれを単純なraytracerにすることに手を差し伸べるかもしれませんが、私はこれらの数学の部分にまっすぐに行きたいと思っていました。

ありがとうございました。


これは役に立ちますが、私の2d「レイトレーサー」です。 asciiを使用して円をコンソールに描画します。私が正しく数学を実装したことを示すことは役に立ちます。

static void Main(string[] args) 
    { 
     double aimx = 30; 
     double aimy = 8; 

     Circle circle = new Circle(45, 13, 12); 
     bool hit = circle.HitCircle(aimx, aimy); 

     Console.WriteLine("Did we hit? {0}", hit); 


     for(int y = 26; y >= 0; y--) 
     { 
      for(int x = 0; x < 90; x++) 
      { 
       if(x == aimx && y == aimy) //Draw target 
       { 
        Console.Write("X"); 
       } 
       else if(circle.HitCircle(x, y)) //Draw all circle hits 
       { 
        Console.Write("#"); 
       } 
       else 
       { 
        Console.Write("-"); 
       } 
      } 
      Console.Write('\n'); 
     } 
     Console.Read(); 
    } 
} 

答えて

1

カプセル交差点とは、カプセルを定義する線分と点の距離を計算する場合です。それが< = rの場合、交差します。

There's a question here that shows how to find that distanceですが、ベクターとドットプロダクトに精通していると仮定します。

+0

リンクをありがとう、私はそれを今読んでいる。数学はかなりエキサイティングなように見えます。 – ekcell

+0

あなたはまだ何も見ていません。これは衝突のより簡単な問題の1つです –

+0

あなたが提供したリンクを使用して作業するカプセルを手に入れることができました。私はまだ数学を理解して働いていますが、確かに正しい方向です。 – ekcell