• 締切済み

VBで円を書いたとき、同じにならないのですが。どうしてでしょう?

VBで、円を描いたとき Circle (CX, CY), 450 で、描いた円と Pi = 3.14159265 For i = 1 To 120 dd = i * 3 x = Cos((90 - dd) * Pi / 180) y = -Sin((90 - dd) * Pi / 180) HX = CX + x * 450 HY = CY + y * 450 PSet (HX, HY) Next i で、描いた円が、重ならないのですが、何故でしょうか? Circle で、描いた円の方が縦が、少し短いような感じになります。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 私には、お話の流れも、VBの種類もわかりませんが、今、VB6で試してみました。 お書きになったコードを移動させて、Circle の円と比較してみましたが、ぴったりと重なりますね。Form のScaleMode を[ユーザー]にしているのではありませんか?[Twip]にしている限りは、同じだと思うのですが。

yodakii
質問者

補足

回答ありがとうございます。 ScaleModeを 1-Twipにしてみましたが、変わりません。コード上ではなく、プロパティーで変えたためでしょうか? 試しているのは、私もVB6です。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>circleだけに、補正がかかっていると言うことでしょうか? >sin cos で計算した値には補正がかからないためと言うことで良いのでしょうか? 補正の話は推測の話なのでそれをさらに説明するのはちょっと腰が引けますが・ 質問文でのsin, cos による座標計算は、 X軸とY軸が等間隔であるという前提の元に座標計算していると思います。 つまり、補正されたいないわけです。 いってみれば、PSet(X,Y)で小さな点を打つ場合、 小さな正方形が敷き詰められていてそれが原点から数えてX軸方向に何個Y軸方法に何個の位置にある正方形を塗りつぶすというようなことをやっているわけです。 ところが、 #1でも言ったようにこのドットは正方形ではなくて、 例えば縦に長い長方形のようになっているのです。 すると、それを正方形だとして同じ座標を用いると Y軸方向に(X軸の幅に比して)伸びることになります。 なので、ドットの長方形の比があらかじめ判っているのであれば、 画面上真円になるように、描画を補正してやることができます。

yodakii
質問者

お礼

ありがとうございました。 ドットの補正に関して調べてみようと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

一般にコンピュータのピクセル(ドット)は、正方形ではなくて、 扁平ですから、(ディスプレイで真円に近くなるよう)そういう補正がされているのかもしれません

yodakii
質問者

補足

ご回答ありがとうございます。 ディスプレイが扁平であるため、補正がかかることは分かりますが、この場合 circle だけに、補正がかかっていると言うことでしょうか? sin cos で計算した値には補正がかからないためと言うことで良いのでしょうか?

関連するQ&A

専門家に質問してみよう