2

フォーラムに投稿するのはこれが初めてです。しかし、私はただ飛び込んで尋ねると思います。私はx、y、幅、高さ、および角度で長方形を描画しようとしています。グラフィックス2Dオブジェクトを作成して、変換を使用したくありません。それは非効率的な方法だと思います。forループを使用して正方形を回転させて正方形の幅に反復し、正方形の高さで各反復に線を描画しようとしています。私の三角法の理解は本当に不足しているので...私の現在のコードはファンキーな三角形を描いています。このような別の質問があり、重複について申し訳ありません。あなたが私のコーディングに何かポインタを持っているなら、私はいくつかの修正またはポインタが欲しいです。

/編集:質問がないことをお詫びします。サインとコサインを使用して、正方形または長方形の左上を中心に回転する正方形または長方形を描画する方法を知る必要がありました。座標(x1、y1)を取得するために角度でsinとcosを使用し、次に(x2、y2)の座標を取得するために角度に90度を加えたsinとcos関数を使用します。カウンタ変数を使用して、角度に応じて変化する上から下に線を左から右に描画します。

for (int s = 0; s < objWidth; s++){

       int x1 = (int)(s*Math.cos(Math.toRadians(objAngle)));
       int y1 = (int)(s*Math.sin(Math.toRadians(objAngle)));

       int x2 = (int)((objWidth-s)*Math.cos(Math.toRadians(objAngle+90)));
       int y2 = (int)((objHeight+s)*Math.sin(Math.toRadians(objAngle+90)));

       b.setColor(new Color((int)gArray[s]));
       b.drawLine(objX+x1, objY+y1, objX+x2, objY+y2);

}
4

2 に答える 2

2

これは回転行列と呼ばれます。回転前の線の座標が次の場合:

1行目:(0、0)-(0、高さ)

2行目:(1、0)-(1、高さ)

..。

線幅:(幅、0)-(幅、高さ)

次に、回転行列変換を適用すると、次のことが役立ちます。

for (int s = 0; s < objWidth; s++){
  int x1 = cos(angle)*s
  int y1 = sin(angle)*s

  int x2 = s * cos(angle) - objHeight * sin(angle)
  int y2 = s * sin(angle) + objHeight * cos(angle) 

//the rest of code
}

私が間違いをしなかったことを望みます。

于 2012-10-16T07:24:43.893 に答える
0

「ひし形」のような意味ですか?http://en.wikipedia.org/wiki/Rhombus(いわば立っているだけ)

もしそうなら、あなたはただ4本の線を描くことができます、水平線はxdiff = height * tan(objAngle)の量だけxが異なります。

あなたのひし形が次のような点を持つ線で構成されるように

p1 = (objX,objY) (lower left corner)
p2 = (objX+xdiff,objY+height) (upper left corner)
p3 = (objX+xdiff+width,objY+height) (upper right corner)
p4 = (objX+xdiff+width,objY) (lower right corner)

そして、p1からp2、p3、p4に線を引き、再びp1に戻ります。

それとも他の形を考えていましたか?

于 2012-10-16T07:29:57.603 に答える