2017-08-22 10 views
0

こんにちは、私はline()とrotate()関数のみを使用して処理で四角形を描画しようとしていますが、おそらく回転関数で少し問題があります。ここ はドロー機能のために私のコードです:処理:関数の回転が正しく動作しません

void draw(){ 
    background(0); 
    stroke(255); 
    for(int i = 0; i < 4; i++){ 
     line(0, 0, GRID_SIZE, 0); 
     translate(GRID_SIZE, 0); 
     rotate(HALF_PI); 
    } 
} 

結果:

The result

なぜ底面と私はPI/2で回転しても、左のラインが傾いていますか? ありがとうございます!

答えて

0

これはかなり予想される動作です。

「実生活」では、PIやPI/2のような数字は無限に長いことに注意してください。コンピュータは無限に長い数字を保持することができないので、変数HALF_PIはおおよその値を保持します。したがって、HALF_PIで回転すると、実際には少しずつ「エラー」が発生して回転しています。そのエラーは増えるので、あなたが見ているもののようなアーティファクトを得る。

これはピクセルがfloatではなく整数であることによって悪化します。したがって、Y位置が20.0000001のピクセルが1つあり、Y位置が19.9999999のピクセルがある場合は、それぞれ2019にレンダリングされるため、大きな違いが表示されます(1ピクセル全体)実際の違いは小さいが、それらの間に

あなたの線をより正方形に見せたい場合は、rect()機能を使用してください。

+0

私はそれについて全く考えなかった。実際に私は四角形を描いています。なぜなら、もし私が四角形を描く必要があるかどうかわからないからです。なぜなら私は 'line()'を4回呼びたいとは思っていなかったからです。とにかく説明をありがとう! –

+0

@EnricoMarconi投稿したコードは 'line()'を4回呼び出します。 'line()'を何の回転もせずに呼び出すように思えます。まさにあなたがすべきことです。 –

関連する問題