質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

3504閲覧

Visual C++で幾何学模様を描くプログラムがうまくいきません。アドバイスお願いします。

oiwa

総合スコア6

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/02/02 15:57

Visual C++で幾何学模様を描くプログラムがうまくいきません。アドバイスお願いします。
幾何学模様のタイルを作りたいです。
途中から逆向きに回転するうずまきを何個も並べてつくりました。
点が範囲の中に入っているときだけw1だけ図を回転させて描きたいのですがうまくいきません。アドバイスお願いします。
ちなみにw1=0だとうまくいくのですが30にするとこうなってしまいます

![イメージ説明]WIDTH:504

lang

1INT UserProgram(HDC hdc, INT wmId) 2{ 3 HGDIOBJ hUserPen, hDefPen; 4 double x = 0, y = 0, z = 0, X, Y, V, W,Y1; 5 INT nXAxis, nYAxis, hWnd, ps, a, b, r, w, N, S, w1; 6 INT nOldXAis, nOldYAxis, nOldXAxis,byouga; 7 double c = 0.5 ; 8 INT d = 180; 9 INT e = 180; 10 w1 = 30; 11 12 13 r = 10; 14 a = 260; 15 b = 260; 16 nOldXAxis = a+d; 17 nOldYAxis = b+e; 18 19 hUserPen = CreatePen(PS_SOLID, 5*c , RGB(0, 0, 0)); 20 hDefPen = SelectObject(hdc, hUserPen); 21 for (S = 0; S <= 1; S += 1){ 22 23 24 25 for (N = 0; N <= 1; N += 1){ 26 for (w = 0; w <= 360; w += 60){ 27 28 MoveToEx(hdc, a + d, (b + 520 * S) + e, NULL); 29 30 31 32 for (int z = 0; z <= 630; z += 1) 33 { 34 35 36 nXAxis = 0; 37 nYAxis = 0; 38 X = 0, Y = 0, x = 0, y = 0; 39 X = (z / 180.0)*3.14; 40 Y = (w / 180.0)*3.14; 41 Y1 = (w1 / 180.0)*3.14; 42 43 44 x = r*X*sin(X); 45 y = r*X*cos(X); 46 V = x*cos(Y) - y*sin(Y); 47 W = x*sin(Y) + y*cos(Y); 48 49 50 nXAxis = (INT)(c*(V + a + 520 * N) + d); 51 nYAxis = (INT)(c*(W + b + 520 * S) + e); 52 TRACE("nXAxis=%d ", nXAxis); 53 TRACE("nYAxis=%d\n", nYAxis); 54 if ((nXAxis > (0 + 520 * N)*c + d && nXAxis < (520 + 520 * N)*c + d && nYAxis >(0 + 520 * S)*c + e && nYAxis < (520 + 520 * S)*c + e) && 55 (nOldXAxis >(0 + 520 * N)*c + d && nOldXAxis < (520 + 520 * N)*c + d && nOldYAxis >(0 + 520 * S)*c + e && nOldYAxis < (520 + 520 * S)*c + e)) 56 { 57 byouga = 1; 58 } 59 else{ 60 byouga = 0; 61 } 62 if (byouga == 1){ 63 64 nOldXAxis = nOldXAxis*cos(Y1) - nOldYAxis*sin(Y1); 65 nOldYAxis = nOldXAxis*sin(Y1) + nOldYAxis*cos(Y1); 66 67 nXAxis = nXAxis*cos(Y1) - nYAxis*sin(Y1); 68 nYAxis = nXAxis*sin(Y1) + nYAxis*cos(Y1); 69 70 71 MoveToEx(hdc, nOldXAxis, nOldYAxis, NULL); 72 LineTo(hdc, nXAxis, nYAxis); 73 74 75 76 77 } 78 nOldXAxis = nXAxis; 79 nOldYAxis = nYAxis; 80 81 } 82 83 84 85 for (int z = 630; z <= 1260; z += 1) 86 { 87 nXAxis = 0; 88 nYAxis = 0; 89 X = 0, Y = 0, x = 0, y = 0; 90 X = (z / 180.0)*3.14; 91 Y = (w / 180.0)*3.14; 92 Y1 = (w1 / 180.0)*3.14; 93 94 95 x = r*X*sin(X); 96 y = -r*X*cos(X); 97 V = x*cos(Y) - y*sin(Y); 98 W = x*sin(Y) + y*cos(Y); 99 100 101 nXAxis = (INT)(c*(V + a + 520 * N) + d); 102 nYAxis = (INT)(c*(W + b + 520 * S) + e); 103 TRACE("nXAxis=%d ", nXAxis); 104 TRACE("nYAxis=%d\n", nYAxis); 105 if ((nXAxis > (0 + 520 * N)*c + d && nXAxis < (520 + 520 * N)*c + d && nYAxis >(0 + 520 * S)*c + e && nYAxis < (520 + 520 * S)*c + e) && 106 (nOldXAxis >(0 + 520 * N)*c + d && nOldXAxis < (520 + 520 * N)*c + d && nOldYAxis >(0 + 520 * S)*c + e && nOldYAxis < (520 + 520 * S)*c + e)) 107 { 108 byouga = 1; 109 } 110 else{ 111 byouga = 0; 112 } 113 if (byouga == 1){ 114 115 nOldXAxis = nOldXAxis*cos(Y1) - nOldYAxis*sin(Y1); 116 nOldYAxis = nOldXAxis*sin(Y1) + nOldYAxis*cos(Y1); 117 118 nXAxis = nXAxis*cos(Y1) - nYAxis*sin(Y1); 119 nYAxis = nXAxis*sin(Y1) + nYAxis*cos(Y1); 120 121 122 MoveToEx(hdc, nOldXAxis, nOldYAxis, NULL); 123 LineTo(hdc, nXAxis, nYAxis); 124 125 } 126 127 128 nOldXAxis = nXAxis; 129 nOldYAxis = nYAxis; 130 } 131 132 133 134 135 for (int z = 1260; z <= 2300; z += 1) 136 { 137 nXAxis = 0; 138 nYAxis = 0; 139 X = 0, Y = 0, x = 0, y = 0; 140 X = (z / 180.0)*3.14; 141 Y = (w / 180.0)*3.14; 142 Y1 = (w1 / 180.0)*3.14; 143 144 145 x = -r*X*sin(X); 146 y = -r*X*cos(X); 147 V = x*cos(Y) - y*sin(Y); 148 W = x*sin(Y) + y*cos(Y); 149 150 151 nXAxis = (INT)(c*(V + a + 520 * N)+d); 152 nYAxis = (INT)(c*(W + b + 520 * S)+e); 153 TRACE("nXAxis=%d ", nXAxis); 154 TRACE("nYAxis=%d\n", nYAxis); 155 if ((nXAxis > (0 + 520 * N)*c+d && nXAxis < (520 + 520 * N)*c+d && nYAxis >( 0 + 520 * S)*c+e && nYAxis < (520 + 520 * S)*c+e)&& 156 (nOldXAxis > (0 + 520 * N)*c+d && nOldXAxis < (520 + 520 * N)*c+d && nOldYAxis > (0 + 520 * S)*c+e && nOldYAxis < (520 + 520 * S)*c+e)) 157 { 158 byouga = 1; 159 } 160 else{ 161 byouga = 0; 162 } 163 if (byouga == 1){ 164 165 nOldXAxis = nOldXAxis*cos(Y1) - nOldYAxis*sin(Y1); 166 nOldYAxis = nOldXAxis*sin(Y1) + nOldYAxis*cos(Y1); 167 168 nXAxis = nXAxis*cos(Y1) - nYAxis*sin(Y1); 169 nYAxis = nXAxis*sin(Y1) + nYAxis*cos(Y1); 170 171 172 MoveToEx(hdc, nOldXAxis, nOldYAxis, NULL); 173 LineTo(hdc, nXAxis, nYAxis); 174 175 } 176 177 nOldXAxis = nXAxis; 178 nOldYAxis = nYAxis; 179 } 180 181 nOldXAxis = a + 520 * N+d ; 182 nOldYAxis = b + 520 * S+e; 183 } 184 nOldXAxis = a + 520 *( N + 1 ); 185 nOldYAxis = b + 520 * S; 186 } 187 } 188 189 190 191 192 SelectObject(hdc, hDefPen); 193 DeleteObject(hUserPen); 194 195 196 197 198 return(0); 199 200} 201 202 203コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

とりあえず調べてみましたが、式の意味が良く分からなかったので苦戦しています。
参考にされたサイトなどもあれば回答者さんの理解の助けになるかと思います。

回答ではありませんが、質問時のアドバイスです。

誰かからアドバイスを受けるためにコードを見せるような場合は、コードをできるだけ綺麗にしたほうが読む方の負担が少なくなり、回答が得やすくなると思います。

具体的には、下記の点です。

  • コードが整形された状態にする 最低でもインデントをそろえる
  • 適切なコメントを書く(何の計算をしているのか、など)
  • すぐにビルドできる最低限のコードをつける ヘッダーインクルード、WinMain部分

よろしくお願いします。

投稿2015/02/03 14:13

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oiwa

2015/02/03 15:08

なんとか自力で解決できました。アドバイスありがとうございます。
argius

2015/02/03 15:19

そうでしたか。 その場合、自分で回答をつけて、ベストアンサーにすると解決済にできます。 お試しください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問