回答編集履歴
2
リージョン作成に使う構造体の定義を忘れていた。
answer
CHANGED
@@ -38,6 +38,12 @@
|
|
38
38
|
第一引数にマトリクスっぽいものが指定できるので、回転はそちらで指定します。
|
39
39
|
|
40
40
|
```cpp
|
41
|
+
// リージョン作成に使う構造体
|
42
|
+
typedef struct RegionData {
|
43
|
+
RGNDATAHEADER rdh;
|
44
|
+
RECT rect[1];
|
45
|
+
} RegionData;
|
46
|
+
|
41
47
|
// こちらは、一応FillRgnを呼んで描画して確認してみた。
|
42
48
|
HRGN create_ellipse_region(const RECT &rect, double angle)
|
43
49
|
{
|
1
ソースコードのコメントを追加
answer
CHANGED
@@ -5,14 +5,18 @@
|
|
5
5
|
// 思いつきで書いたので、動作は不定
|
6
6
|
bool point_in_rotated_ellipse(const RECT &rect, double rad, const POINT &pt)
|
7
7
|
{
|
8
|
+
// 楕円のサイズ
|
8
9
|
int width = rect.right - rect.left;
|
9
10
|
int height = rect.bottom - rect.top;
|
11
|
+
// 楕円の中心座標
|
10
12
|
int cx = rect.left + width / 2;
|
11
13
|
int cy = rect.top + height / 2;
|
12
14
|
|
15
|
+
// 中心座標→点のベクトル
|
13
16
|
int dx = pt.x - cx;
|
14
17
|
int dy = pt.y - cy;
|
15
18
|
|
19
|
+
// ベクトルを逆回転させる。
|
16
20
|
double x = dx * std::cos(-rad) - dy * std::sin(-rad);
|
17
21
|
double y = dx * std::sin(-rad) + dy * std::cos(-rad);
|
18
22
|
|