1

塗りつぶしの正方形を描く必要があります。その正方形は中心から線で描く必要があります。Javaシェイプは使用できません

中心点があり、ペンは各角度で中心から正方形のエッジまで線を引く必要があります。

ここでの問題は数学です。ペイントに必要な距離を計算するために何を使用できますか。いつも同じ距離を使うと円が描かれるからです。

ありがとう

4

3 に答える 3

1

正方形を描くとき、​​任意の角度で描く必要がある長さは、直角三角形の斜辺の長さと考えることができます。これは、三角比で簡単に解決できます。トリッキーな部分は、三角形の底辺が動き回ることです。

下の図の左半分に示されている 45 度の線の例を取り上げます。

赤い線 (hyp) の長さを計算する必要があります。三角法を使用して、adj に対する角度と adj の長さに基づいて hyp の長さを計算できます。adj 辺の長さは、正方形の高さの半分です。

使用する式は次のとおりです。

cos(角度) = adj/hyp

再配置:

hyp = adj/cos(角度)

コードは次のようになります。

public static double calculateLengthToPaint(double angle, double heightOfSquare){
      return  (heightOfSquare/2.0) / Math.cos(Math.toRadians(angle));
}

残念ながらそれだけではありません。これは最初の 45 度では完全に機能しますが、角度が 45 度を超えると、三角形の隣接する辺の位置が変わります (下の図の右半分に見られるように)。45度ごとにひっくり返ります。

この反転を処理するには、メソッドに渡された角度 (12 時の位置から正方形の周りの角度) を使用して、想像している三角形の角度を計算する必要があります。上記の方法を修正して、修正された角度を計算するロジックを追加しました。

public static double calculateLengthToPaint(double angle, double heightOfSquare){
    double flippy = angle % 90;
    if (flippy > 45.0){
        flippy -= 90;
        flippy = Math.abs(flippy);
    }
      return  (heightOfSquare/2.0) / Math.cos(Math.toRadians(flippy));
}

注: このコードは角度を度単位で取り、正の角度に対してのみ機能します。また、線を周囲の周りで均等な増分で正方形に合わせたい場合は、ピタゴラスの定理を使用して斜辺の長さを計算し、三角法を使用して角度を計算するソリューションを考え出す必要がありますで描きます。

それが役立つことを願っています。

三角形が斜辺を 45 度で裏返していることを示しています。

于 2012-11-14T13:15:28.917 に答える
1

を使用するだけjava.awt.Graphics.fillRect(int, int, int, int)です。

于 2012-11-14T02:17:52.900 に答える
0

私はこのようなことを言うでしょう

for(int i = sideLength * -1; i < sideLength; i++) {
for(int j = sideLength * -1; j < sideLength; j++) {
   graphics.drawLine(centerX + i, centerY + j);
}
}

そうすれば、作成しようとしている正方形のすべての点に線が描画されます。これがあなたが望んでいたものかどうかはわかりませんが、うまくいきます。

于 2012-11-14T01:42:11.487 に答える