2010-11-23 14 views
2

私はJavaアプリケーションを作成しています。私は3点の行列式を計算する必要があります。私はそれを計算していますJavaの3点行列式

 static int determinant(Point point1, Point point2, Point point3) { 
    int x1 = point1.x; 
    int x2 = point2.x; 
    int x3 = point3.x; 
    int y1 = point1.y; 
    int y2 = point2.y; 
    int y3 = point3.y; 
    return (x1 * y2) + (x3 * y1) + (x2 * y3) - (x3 * y2) - (x2 * y1) 
      - (x1 * y3); 
} 

(私は数学ではよくないよ)しかし、私見つけ、私はそれについて検索するときは、次の

public int ccw(int p1, int p2, int p3) 
{ 
return (xPoints[p2] - xPoints[p1])*(yPoints[p3] - yPoints[p1]) - (yPoints[p2] - yPoints[p1])*(xPoints[p3] - xPoints[p1]); 
} 

正しい方法は一つであり

?最初のメソッドが正しい場合、2番目のメソッドは何をしますか?

+0

行列式が必要ですか?あなたは何を達成しようとしていますか?伝統的に行列式は非正方行列(あなたが持っている行列)に対して定義されていません。 –

答えて

0

両方の式が同じです。両者の間には数学的な違いはありません。

私はおそらくあなたに数学的な証明を与えることができる数学でより良い人。私は

def fun1(p1,p2,p3) : 
    print (p1[0]*p2[1])+(p3[0]*p1[1])+(p2[0]*p3[1]) - (p3[0]*p2[1]) - (p2[0]* 
    p1[1]) - (p1[0]*p3[1]) 

def fun2(p1,p2,p3) : 
    print (p2[0]-p1[0])*(p3[1]-p1[1])-(p2[1] - p1[1])*(p3[0]-p1[0]) 

>>> fun1((0,0),(9,1),(3,2)) 
15 
>>> fun2((0,0),(9,1),(3,2)) 
15 
>>> fun2((33,5),(4,6),(8,1)) 
141 
>>> fun1((33,5),(4,6),(8,1)) 
141 

任意の3点について、FUN1とfun2は、同じ結果をもたらすことができるので、私は、Pythonで実装実用的なルートを行くことを選びました。

+0

あなたの素晴らしい答えをありがとう –

0

第二のバージョンは、点が2つの1次元配列で定義されていることを前提としています

int [] xPoints; 
int [] yPoints; 
  • xPoints[p]
  • yPoints[p]点PのY位置を保持する点pのx位置を保持

私は数学を行っていませんが、おそらく2つの方法が実際に同じことを計算します。

関連する問題