2011-04-09 4 views
0

固定小数点からマウスの位置に基づくポイントまでの長さが50pxの線を描画しようとしていますが、三角法ではひどいです。 私はこの一日中立ち往生しており、それをどうやってやっているのかまだ分かりません。 4つの変数は次のとおりです。固定小数点からマウス位置に向かって線を描くJava

startX; //X position of fixed point 
startY; //Y position of fixed point 
mouseX; //X position of mouse 
mouseY; //Y position of mouse 

ありがとうございます。

答えて

1

あなたがAWT Graphics classを使用していると仮定すると、あなたはこれを行うことができます:

double angle=Math.atan2(mouseY-startY, mouseX-startX); 
g.setColor(Color.BLACK); 
g.drawLine(startX, startY, 
    Math.floor(startX+Math.cos(angle)*50), 
    Math.floor(startY+Math.sin(angle)*50)); 
+0

たちの線を引くことができます。 – icktoofay

4

は、あなたがポイントにマウスカーソルの方向にUnit Vector(長さ1のベクトル)を作成したいと思います。次に単位ベクトルに50を掛け、その方向に長さ50のベクトルを得ました。

ですから、最初のマウスカーソルに固定点からベクトルを得る:

float dirX = mouseX - startX; 
float dirY = mouseY - startY; 

次に、あなたのノーマライズこのベクトルを(それは長さ1のmake)

float dirLen = sqrt(dirX * dirX + dirY * dirY); // The length of dir 
dirX = dirX/dirLen; 
dirY = dirY/dirLen; 

今、私たちは、正規化ベクトルを乗算50で、私たちが望む方向に長さ50のベクトルを得ました。

float lineX = dirX_normalized * 50; 
float lineY = dirY_normalized * 50; 

今、私たちは、これはおそらく、デビッドの答えよりも遅い

g.drawLine(startX, startY, startX + lineX, startY + lineY); 
+0

ニース、トリガーも必要ありません。ちょうどスケール。 :-) –

+0

嬉しいことに、私はsin&cosを使って答えを入力しようとしていました –

関連する問題