回答編集履歴

1

コード追記

2023/01/07 07:07

投稿

TN8001
TN8001

スコア9357

test CHANGED
@@ -1,10 +1,150 @@
1
+ コードは画像ではなく文字(コードブロック)で提示してください。
2
+ はっきり言ってその時点で回答する気が起きません(回答者も実際に動作確認等しています。全部書き起こすとなるとかったるすぎます)
3
+
4
+ ---
5
+
1
6
  p5.jsには`PShape`に当たるものがありません。
2
7
  [implement PShape · Issue #37 · processing/p5.js](https://github.com/processing/p5.js/issues/37)
3
8
 
4
9
  SVGも標準では読めません。
5
10
  [zenozeng/p5.js-svg: SVG runtime for p5.js.](https://github.com/zenozeng/p5.js-svg)
6
11
 
7
- `PShape`を使わずに同様の結果を出すことも可能だろうとは思いますが、元コードとは全く異なるコードになるでしょう。
12
+ ~~`PShape`を使わずに同様の結果を出すことも可能だろうとは思いますが、元コードとは全く異なるコードになるでしょう。~~
13
+ ~~正六角形だとわかっているならSVGを使わずに、`PVector`(`p5.Vector`)の配列として扱ってはどうでしょうか?~~
8
14
 
15
+ ---
9
16
 
17
+ コードを書き起こしていて気が付きましたが、SVGは飾り?なんですね。
18
+ ならばSVGをなにかしらの方法で、PNGにでも変えてください。
19
+ [svg png 変換 - Google 検索](https://www.google.com/search?q=svg+png+%E5%A4%89%E6%8F%9B)
20
+
21
+ 結局`drawShape`で同じようなことをしているので、`PShape`も(6角形程度なら)必要ないです。
22
+
23
+ 微妙な仕様違いでいくつか罠がありました。
24
+ ```Java
25
+ PImage img;
26
+ int gon = 6;
27
+ float scalar;
28
+ int j = 1;
29
+ int k = 0;
30
+
31
+ void setup() {
32
+ size(300, 300);
33
+ imageMode(CENTER);
34
+
35
+ scalar = height * 0.4;
36
+ img = loadImage("F.png");
37
+ drawShape();
38
+ }
39
+
40
+ void drawShape() {
41
+ background(200);
42
+ translate(width / 2, height / 2);
43
+
44
+ pushMatrix();
45
+ scale(1, j);
46
+ rotate(k * 2 * PI / gon);
47
+ image(img, 0, 0);
48
+ popMatrix();
49
+
50
+ noFill();
51
+ beginShape();
52
+ for (int i = 0; i < gon; i++) {
53
+ int ind = (j * i - k + 2 * gon) % gon;
10
- 正六角形だとわかっているならSVGを使わずに、`PVector`(`p5.Vector`)の配列として扱ってはどうでしょうか?
54
+ PVector v = PVector.fromAngle(2 * PI * i / gon);
55
+ v.mult(scalar);
56
+ vertex(v.x, v.y);
57
+
58
+ textSize(20);
59
+ text(ind, v.x, v.y);
60
+ }
61
+ endShape(CLOSE);
62
+ }
63
+
64
+ void keyPressed() {
65
+ if (key == 's') {
66
+ j *= -1;
67
+ println(key);
68
+ } else if (key == 'r') {
69
+ k = (k + j + gon) % gon;
70
+ println(key);
71
+ } else if (key == 'e') {
72
+ k = 0;
73
+ j = 1;
74
+ println("RESET");
75
+ }
76
+ drawShape();
77
+ }
78
+
79
+ void draw() {}
80
+ ```
81
+
82
+ ```JavaScript
83
+ let img;
84
+ let gon = 6;
85
+ let scalar;
86
+ let j = 1;
87
+ let k = 0;
88
+
89
+ function preload() {
90
+ img = loadImage("data/F.png"); // 画像読み込みはpreloadで
91
+ }
92
+
93
+ function setup() {
94
+ createCanvas(300, 300);
95
+ imageMode(CENTER);
96
+
97
+ scalar = height * 0.4;
98
+
99
+ drawShape();
100
+ }
101
+
102
+ function drawShape() {
103
+ background(200);
104
+ translate(width / 2, height / 2);
105
+
106
+ push();
107
+ scale(1, j);
108
+ rotate(k * 2 * PI / gon);
109
+ image(img, 0, 0);
110
+ pop();
111
+
112
+ noFill();
113
+ beginShape();
114
+ for (let i = 0; i < gon; i++) {
115
+ let ind = (j * i - k + 2 * gon) % gon;
116
+ let v = p5.Vector.fromAngle(2 * PI * i / gon);
117
+ v.mult(scalar);
118
+ vertex(v.x, v.y);
119
+ }
120
+ endShape(CLOSE);
121
+
122
+ // textもfill vertexと同時に描けなかった
123
+ fill(0);
124
+ for (let i = 0; i < gon; i++) {
125
+ let ind = (j * i - k + 2 * gon) % gon;
126
+ let v = p5.Vector.fromAngle(2 * PI * i / gon);
127
+ v.mult(scalar);
128
+ textSize(20);
129
+ text(ind, v.x, v.y);
130
+ }
131
+ }
132
+
133
+ function keyPressed() {
134
+ if (key == 's') {
135
+ j *= -1;
136
+ print(key); // logでもいいがprintはある
137
+ } else if (key == 'r') {
138
+ k = (k + j + gon) % gon;
139
+ print(key);
140
+ } else if (key == 'e') {
141
+ k = 0;
142
+ j = 1;
143
+ print("RESET");
144
+ }
145
+ drawShape();
146
+ }
147
+
148
+ function draw() {}
149
+ ```
150
+