java - 在处理和理解代码中创建可视化
问题描述
我正在尝试进行创意编码,主要是为了创建实时视觉效果。我最近偶然发现了一个名为https://www.openprocessing.org/的很棒的网站,人们可以在这里分享他们的创作。
我在下面附加了用于创建两个移动圆圈的代码,但我无法理解创建者是如何这样做的,如果有人可以向我解释 for 循环是如何工作的以及该x += 0.006; y += 0.006; if (x > TWO_PI) {x = 0;}
部分是如何工作的,将不胜感激。sin
,cos
和 Two_PI 函数的使用让我感到困惑。这是原始代码的链接:
https://www.openprocessing.org/sketch/467333
//comment
float x = 0;
float xx = 0;
float y = 0;
float yy = 0;
float sizecircle = 250;
void setup() {
size (800, 650);
frameRate (60);
strokeWeight (1);
stroke (223, 170, 22);
}
void draw() {
background (51, 51, 51);
for (float i = 0; i < TWO_PI; i += TWO_PI/100) {
line (350 + sin(x+i) * sizecircle, 275 + cos(y+i) * sizecircle, 450 + cos(xx+i) * sizecircle, 375 + sin(yy+i) * sizecircle);
}
x += 0.006;
y += 0.006;
if (x > TWO_PI) {
x = 0;
}
if (y > TWO_PI) {
y = 0;
}
xx += 0.002;
yy += 0.002;
if (xx > TWO_PI) {
xx = 0;
}
if (yy > TWO_PI) {
yy = 0;
}
}
解决方案
sin
和的角度单位cos
是弧度。360° 是 2*PI,这就是TWO_PI
.
变量x
、y
和递增 0.0xx
到yy
2*PI。如果它们达到 2*PI,它们会再次从 0.0 开始。
使用以下代码将从中心点 ( cx
, cy
) 到半径为 100 个点的圆画线r
。
for (float i = 0; i < TWO_PI; i += TWO_PI/100) {
line(cx, cy, cx + cos(i)*r, cy + sin(i)*r);
}
问题代码中的技巧是这些线连接了 2 个圆周围的点,这些圆的旋转方向相反:
line(cx1 + sin(i)*r, cy1 + cos(i)*r,
cx2 + cos(i)*r, cy2 + sin(i)*r);
请注意,与终点相比,起点sin
和起点的顺序交换了,这会导致圆的旋转方向相反。
不同的转速分别是由不同的常数引起的。cos
0.006
0.002
顺便说一句,代码可以简化,因为x == y
和xx == yy
. TWO_PI
在 [0, ]范围内使用 2 个角就足够了:
float a1 = 0;
float a2 = 0;
float sizecircle = 250;
void draw() {
background (51, 51, 51);
for (float i = 0; i < TWO_PI; i += TWO_PI/100) {
line (350 + sin(a1+i)*sizecircle, 275 + cos(a1+i)*sizecircle,
450 + cos(a2+i)*sizecircle, 375 + sin(a2+i)*sizecircle);
}
a1 += 0.006;
a2 += 0.002;
}
由于sin(x) == sin(x + TWO_PI*n)
和cos(x) == cos(x + TWO_PI*n)
(n 是整数),没有必要“重置”角度。
推荐阅读
- airflow - 气流:重新运行 DAG 无法加载以前运行的 XCOM
- memory-leaks - Dart Stream.periodic 内存泄漏
- python - 如何在使用 keras 的神经网络中输入一个包含 n 个项目的数组并输出一个大小为 k 的数组?
- python - 从python中定义的类调用函数?
- c++ - Visual Studio - 代码在发布但不在调试(C++)
- momentjs - 将 moment.js 与 serverless-bundle 一起使用时出错
- angular - ng build 编译所有角度材质模块
- python - 使用一个打印命令打印结果
- c++ - 当纹理数量增加时,多个立方体贴图纹理表现异常
- r - 来自 R API 调用的重复行