teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

リージョン作成に使う構造体の定義を忘れていた。

2019/07/10 11:33

投稿

katsuko
katsuko

スコア3601

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

ソースコードのコメントを追加

2019/07/10 11:33

投稿

katsuko
katsuko

スコア3601

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