
いつもお世話になります。
下記ソースにてビットマップの回転を実現させようとしております。
ソースの一部ですので処理概要を説明すると、
まず、編集用画像領域をimage[][]に格納しておいて、
バッファでデータのやり取りをしており、下記ソースで演算後、
BitBltしております。
そこで、三角関数の処理に公式を利用しているのですが、
どうも左回転してしまいます。右回転したいので
安直に下記RotX・RotYを入れ替えたら右回転したんですけど、
実際の表示位置とは反転してしまいます。
数学的な話だと思うのですが、正常に右回転する方法を
ご存知の方、ご教授よろしくお願い致します。
開発環境はVC++6.0MFCです。
for (y = 0 ; y<Height ; y++) { //オリジナル針のY方向
for (x=0 ; x<Width ; x++) { //オリジナル針のX方向
double IncreX=x-2.5; //針中心からのベクトル
double IncreY=y-31.5;//針中心からのベクトル
double RotX= IncreX*::cos(m_dSAngle)-IncreY*::sin(m_dSAngle);
double RotY= IncreX*::sin(m_dSAngle)+IncreY*::cos(m_dSAngle);
long Offset = long(50.0+RotY) * 100 + long(50.0+RotX);
ASSERT(Offset<100*100);
*(buf+Offset)=image[y][x];
}
}

No.2ベストアンサー
- 回答日時:
他のソースが見えないので何とも言えませんが、多分ここのところが問題なんだと思いますのでアドバイスさせて頂きます。
DIBでの画像データは左下がオフセットとなり、右方向へなめて一段上へ・・・このように格納されています。
これを理解せずに回転しようとすると、反対方向へ回転しますので、DIBをバイナリレベルで扱う場合は注意してください。
image[0][0]は画像左下の座標なので、y座標の考え方を根本から反転してください。表示位置に影響が出たのはそのためだと思われます。
*DDサーフェイスはちゃんと左上が頂点ですが、過去の解答を見る限りDIBですよね?
また、オリジナル側の画像を参照して回転すると、斜線がガタガタになったり、画像に穴ができたりします。
根本的な対策は、ここで言うところのbuf側から全部の座標を埋めていく事です。
※ここで複数の座標を参照すれば綺麗な中間色が出せます。が、重い・・・
ソースは御自身で作成できると思いますので、頑張ってください。このままでよろしければ、yのあたりをチョコッと直せば済む筈です。
*私はWin32ベース(というか、こういう細かい部分はasm)で作るので、MFCベースのソースはちょっと・・なので。投げやりでごめんなさい。
また、回転拡大縮小はAPIに任せた方が楽だと思いますよ?
結局キャッシュミスが起こるので、アセンブラで作成しても大差ないです。
尚、参照URLの方が的確なアドバイスが選られると思います。
ご参考まで。
参考URL:http://www.bio100.co.jp/
No.1
- 回答日時:
角度の測り方は反時計回りが標準ですから、普通にやったのでは左回転
するでしょうね。
で、時計回りにするには、簡単です。角度をマイナスにすれば良いのです。
ご質問の例ではm_dsAngleを(-m_dsAngle)で入れ替えればよいことになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
3次元空間上の2つの座標から...
-
円弧の描画について
-
ガウシアンフィルタのCプログラム
-
空間上の二点を結ぶ直線上に任...
-
多角形の内部かどうか判定する方法
-
OpenCvSharp4による画像判定解...
-
選択範囲の座標値の抽出
-
C言語 配列で座標
-
matlab-図形表示
-
弧の長さから角度を取得するには。
-
C言語で制作するピラミッドアー...
-
6点からの楕円の近似計算(最...
-
球面状に円を描くプログラム
-
以下のプログラムは重心を求め...
-
対数表示のグラフを書くには
-
交差する2線分の交点座標の求め方
-
Kinectを用いて人の空間での位...
-
VBA FOR・・・・NEXTについて
-
PPTのVBA スライド右下端の座...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
c言語でキーボードから2点の座...
-
3次元空間上の2つの座標から...
-
ワード上Shapeの位置情報を統一...
-
シーケンサー(PLC?)で制...
-
多角形の内部かどうか判定する方法
-
Excel VBA で自在に図形を変化...
-
ガウシアンフィルタのCプログラム
-
エクセルで回転する座標の出し方
-
エクセルである点からの距離で...
-
選択範囲の座標値の抽出
-
ダイアログ内コントロールの位...
-
y=x^2の座標をプロットするプロ...
-
有限要素法について教えてください
-
有限要素法(FEM)について教え...
-
C言語 配列で座標
-
PanelとCanvasの違いについて
-
タッチパッドのタッチ座標取得
-
アクセスのセルの数え方。
おすすめ情報