回答編集履歴
3
.
test
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
```
|
17
17
|
のような計算になります。
|
18
18
|
|
19
|
-
ちなみに、元画像をループして
|
19
|
+
ちなみに、元画像をループして各ピクセルの変換後の座標を求めて描画するより、変換後の座標をループして対応する元画像のピクセルを読み込んだほうが綺麗な描画結果になることが多いです。
|
20
20
|
|
21
21
|
----
|
22
22
|
|
2
SetWorldTransform()
test
CHANGED
@@ -18,4 +18,8 @@
|
|
18
18
|
|
19
19
|
ちなみに、元画像をループしての各ピクセルの変換後の座標を求めて描画するより、変換後の座標をループして対応する元画像のピクセルを読み込んだほうが綺麗な描画結果になることが多いです。
|
20
20
|
|
21
|
+
----
|
21
22
|
|
23
|
+
Windows だったらメモリDCに `SetWorldTransform()` を設定して `BitBlt()` すれば簡単にできそうな気がします。
|
24
|
+
|
25
|
+
|
1
.
test
CHANGED
@@ -7,11 +7,11 @@
|
|
7
7
|
int rot_x = (int)(src_x * cos(45 * M_PI / 180) - src_y * sin(45 * M_PI / 180));
|
8
8
|
int rot_y = (int)(src_x * sin(45 * M_PI / 180) + src_y * cos(45 * M_PI / 180));
|
9
9
|
```
|
10
|
-
`rot_x` `rot_y` の計算に `x` `y` がまったく使われていません。おそらくすべてのピクセルがある1点に描画されてい
|
10
|
+
`rot_x` `rot_y` の計算に `x` `y` がまったく使われていません。おそらくすべてのピクセルがある1点に描画されています。
|
11
11
|
|
12
12
|
「回転行列 中心」などで検索するといくらでも解説が出てくると思いますが、ここでは
|
13
13
|
```擬似コード
|
14
|
-
rot_x = x * cos - y * sin + srcx - src_x * cos + src_y * sin;
|
14
|
+
rot_x = x * cos - y * sin + src_x - src_x * cos + src_y * sin;
|
15
15
|
rot_y = x * sin + y * cos + src_y - src_x * sin - src_y * cos;
|
16
16
|
```
|
17
17
|
のような計算になります。
|