有兴趣的朋友可以一起来研究研究。好,前言少叙。我们直接开始正题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
// 绘制三角形
// 属性
PVector[] vec;
// 顶点-位置
PVector offset;
// 坐标系偏移量
color[] cs;
// 色表
final
int
EDGE =
3
;
// 多边形边数
void
setup() {
// 设置窗口,一句话就搞定了T_T
size(
400
,
400
, P3D);
// 关闭描边
noStroke();
// 给顶点赋值
vec =
new
PVector[EDGE];
for
(
int
i =
0
; i < vec.length; i++) {
vec = CalculatePointOfTheCircle(
float
(i) * (
360.0
/
float
(vec.length)));
}
// 给色表赋值
cs =
new
color[
3
];
cs[
0
] = color(
255
,
0
,
0
);
cs[
1
] = color(
0
,
255
,
0
);
cs[
2
] = color(
0
,
0
,
255
);
// 设置偏移
offset =
new
PVector(
0.5
*width,
0.5
*height,
0.0
);
}
void
draw() {
// 清除屏幕缓冲区
background(
0
);
// 变换矩阵
translate(offset.x, offset.y, offset.z);
float
angle = radians(frameCount%
360
);
rotateZ(angle);
// 旋转的是世界坐标
// 绘制图形
beginShape();
for
(
int
i =
0
; i < vec.length; i++) {
fill(cs[i%cs.length]);
vertex(vec.x, vec.y, vec.z);
}
endShape(CLOSE);
}
// 求取点在圆中对应角度的位置
// 无论是三角形、正方形、还是六菱形,它们都能在圆中找到对应的点
// 圆心就在坐标系原点上
PVector CalculatePointOfTheCircle(
float
angle) {
float
size =
100.0
;
// 多边形的尺寸
float
x = sin(radians(angle)) * size;
float
y = cos(radians(angle)) * size;
PVector v =
new
PVector(x, y,
0.0
);
return
v;
}
|
1
2
3
4
5
|
beginShape();
vertex(
50
,
20
);
vertex(
85
,
75
);
vertex(
15
,
75
);
endShape(CLOSE);
|
1
2
3
4
5
6
7
|
size(
100
,
100
, P3D);
beginShape();
vertex(
50
,
20
,
0
);
vertex(
85
,
75
,
0
);
vertex(
15
,
75
,
0
);
endShape(CLOSE);
|
1
2
3
4
5
6
7
8
9
10
|
size(
400
,
400
, P3D);
noStroke();
fill(
0
,
255
,
0
);
beginShape();
vertex(
200
,
100
,
0
);
vertex(
300
,
300
,
0
);
vertex(
100
,
300
,
0
);
endShape(CLOSE);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
// 设定窗口
size(
400
,
400
, P3D);
// 清除背景(图像缓冲区)
background(
0
);
// 设定图像显示参数
noStroke();
// 绘制图形
beginShape();
fill(
255
,
0
,
0
);
// 设定顶点颜色
vertex(
200
,
100
,
0
);
fill(
0
,
255
,
0
);
// 系统会自动为两个顶点做插值计算
vertex(
300
,
300
,
0
);
fill(
0
,
0
,
255
);
vertex(
100
,
300
,
0
);
endShape(CLOSE);
|