回答編集履歴

1

見直しキャンペーン中

2023/07/29 10:53

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -1,97 +1,51 @@
1
1
  公式ドキュメントに、正多角形のサンプルがあります(円に内接する正多角形として描いているようですね)
2
-
3
2
  [Regular Polygon / Examples / Processing.org](https://processing.org/examples/regularpolygon.html)
4
3
 
5
-
6
-
7
4
  `translate`や`rotate`で描きたい位置に動かしますが、今どこにどういう向きになっているか把握しなければなりません。
8
-
9
5
  紙に絵を描いて回してみたりすると、わかりやすいかもしれません^^
10
6
 
11
-
12
-
13
7
  そのままってのもあれなので、サイズを半分にしました^^;
14
-
15
8
  ```Processing
16
-
17
9
  void setup() {
18
-
19
10
  size(500, 500);
20
-
21
11
  }
22
12
 
23
-
24
-
25
13
  void draw() {
26
-
27
14
  background(255);
28
-
29
15
  noFill();
30
16
 
31
-
32
-
33
17
  translate(width / 2, height / 2); // まずはとにかく中央を0,0に
34
-
35
18
  rotate(frameCount / 200f); // 全体を回す
36
-
37
-
38
19
 
39
20
  circle(0, 0, 275); // 親の円
40
21
 
41
-
42
-
43
22
  for (int i = 0; i < 6; i++) { // とりあえず6個
44
-
45
23
  //circle(150, 0, 50 * 2); // 外接円確認用 直径100
46
-
47
24
  polygon(150, 0, 50, 3); // 中央から見て右に三角(三角が▷向きだから)
48
25
 
49
-
50
-
51
26
  rotate(TWO_PI / 6); // 1/6周回す
52
-
53
27
  }
54
-
55
28
  }
56
29
 
57
-
58
-
59
30
  void polygon(float x, float y, float radius, int npoints) {
60
-
61
31
  float angle = TWO_PI / npoints;
62
-
63
32
  beginShape();
64
-
65
33
  for (float a = 0; a < TWO_PI; a += angle) {
66
-
67
34
  float sx = x + cos(a) * radius;
68
-
69
35
  float sy = y + sin(a) * radius;
70
-
71
36
  vertex(sx, sy);
72
-
73
37
  }
74
-
75
38
  endShape(CLOSE);
76
-
77
39
  }
78
-
79
40
  ```
80
-
81
41
  ほかにも描画したいものがある場合は、`pushMatrix()`・`popMatrix()`を適切な場所に入れてください。
82
42
 
83
-
43
+ ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2023-07-29/e8641ab6-85ff-482e-8722-080ec1107dc8.gif)
84
44
 
85
45
  ---
86
46
 
87
-
88
-
89
47
  半径から辺の長さを知りたい場合。
90
-
91
48
  [円に内接する正多角形 - 高精度計算サイト](https://keisan.casio.jp/exec/system/1166416582)
92
49
 
93
-
94
-
95
50
  辺の長さから半径を決めたい場合。
96
-
97
51
  [正多角形の外接円 - 高精度計算サイト](https://keisan.casio.jp/exec/system/1258355051)