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

回答編集履歴

1

追記

2020/07/02 05:00

投稿

fana
fana

スコア12227

answer CHANGED
@@ -2,4 +2,44 @@
2
2
 
3
3
  * sinやcosの引数はラジアンですぜ.
4
4
  * `glClear(GL_COLOR_BUFFER_BIT);`をループの中じゃなくて,ループの手前に移動しよう.これだとせっかく描画した内容が毎度消去されている.
5
- * そもそも,円を描こうとしている範囲が視野範囲に比べてはるかにでかいので,上記を修正しても「見えない」.
5
+ * そもそも,円を描こうとしている範囲が視野範囲に比べてはるかにでかいので,上記を修正しても「見えない」.
6
+
7
+ とりあえず,こんな感じ↓の状態を出発点にしてみてはどうか.
8
+ ```
9
+ //「度」な角度に乗じることで「ラジアン」にするための係数
10
+ const double Deg2Rad_Coeff = acos(-1.0) / 180.0;
11
+
12
+ //Deg[度]に対するcosとsinの値を,px,pyの指す先に格納する.
13
+ void CalcPos( int Deg, double *px, double *py )
14
+ {
15
+ double rad = Deg*Deg2Rad_Coeff;
16
+ *px = cos( rad );
17
+ *py = sin( rad );
18
+ }
19
+
20
+ void display()
21
+ {
22
+ const int StepDeg = 10;
23
+ int DegB;
24
+ double xa, ya, xb, yb;
25
+
26
+ glClear(GL_COLOR_BUFFER_BIT);
27
+ glColor3d(1.0, 0.0, 0.0);
28
+
29
+ glBegin(GL_LINES);
30
+ {
31
+ CalcPos( 0, &xa, &ya );
32
+ for( DegB=StepDeg; DegB<360; DegB+=StepDeg )
33
+ {
34
+ CalcPos( DegB, &xb, &yb );
35
+ glVertex2d(xa, ya);
36
+ glVertex2d(xb, yb);
37
+ xa = xb;
38
+ ya = yb;
39
+ }
40
+ }
41
+ glEnd();
42
+
43
+ glFlush();
44
+ }
45
+ ```