gpt4 book ai didi

java - 了解加工过程中圆是如何形成的

转载 作者:行者123 更新时间:2023-12-01 10:36:05 25 4
gpt4 key购买 nike

import ddf.minim.*;

Minim minim;
AudioPlayer player;
PImage img;

void setup() {
size(728, 546);

minim = new Minim(this);

player = minim.loadFile("Bassnectar_-_Magical_World_feat.wav");
player.play();
img= loadImage("cat-in-shades-.jpg");
}

void draw() {


image(img, 0, 0);
tint(0, 100, 150);
stroke(255);

strokeWeight(4);
float a = 0;

float angle = (2*PI) / 200;


for(int i=0; i < player.bufferSize() - 1; i++) {

//player.mix.get(i) is a value between [-1,1]

float x = 250 + cos(a) * (20 * player.mix.get(i) + 100);
float x2 = 540 + cos(a) * (20 * player.mix.get(i) + 100);

float y = 230 + sin(a) * (20 * player.mix.get(i) + 100);
float y2 = 240 + sin(a) * (20 * player.mix.get(i) + 100);


float xFinal = 250 + cos(a+angle) * (20 * player.mix.get(i+1) + 100);
float x2Final = 540 + cos(a+angle) * (20 * player.mix.get(i+1) + 100);


float yFinal = 230 + sin(a+angle) * (20 * player.mix.get(i+1) + 100);
float y2Final = 240 + sin(a+angle) * (20 * player.mix.get(i+1) + 100);


line(x,y,xFinal,yFinal);
line(x2,y2,x2Final,y2Final);

a += angle;

}

}

void stop() {
player.close();
minim.stop();

super.stop();
}

上面的以下代码用于使用 Minim 库在处理中创建音频可视化工具。由于某种原因,我很难理解代码的 for 循环中如何形成一个圆圈。一般来说,我也会尝试分解代码并更深入地了解正在发生的事情。我对以下问题感到困惑: 'float x = 250 + cos(a) * (20 * player.mix.get(i) + 100);'20倍加100是用来放大 sample 的吗?如果是这样,那么为什么当我去掉 20 次而只有 + 20000 时,圆可视化工具不显示? 250 是否用于在背景图像内的 x 轴上放置线条的起点?最后,为什么需要变量“角度”?当我把它拿出来时,我注意到可视化工具并不那么平滑,因为象限之间似乎有一个划分。
我一直在研究这段代码,但找不到太多带有详细解释的示例,因此我们将不胜感激。谢谢。

最佳答案

您需要做的第一件事是更好地理解基本三角学。那里有大量的资源:尝试在谷歌上搜索“sin cos 教程”或“游戏开发的 sin 和 cos”或“sohcahtoa”以获得一堆结果。

但基本上,如果您有起点、旋转和距离,您可以使用 sincos 计算出终点在哪里。计算终点的基本公式是:

endX = startX + cos(rotation)*distance;
endY = startY + sin(rotation)*distance;

您的代码使用此公式来查找圆周围的点,以便可以在它们之间绘制线条来绘制圆。圆的每条线段都是 2 个端点。

angle 变量用于指定这些点之间的距离。你做得越小,它看起来就越“圆”。做得越大,您就越能看到构成圆的直线。

使用更简单的示例可能会更容易:

void setup(){
size(500, 500);
}

void draw(){
background(0);

//draw white
stroke(255);

//the start point- try changing this to mouseX and mouseY
float centerX = width/2;
float centerY = height/2;

//the distance from the start point
float radius = 100;

//how far apart the points are
float angleIncrement = 30;

//loop to go around the circle. Try changing it to 180 to see what happens.
for(float angleInDegrees = 0; angleInDegrees <= 360; angleInDegrees+=angleIncrement){

//the first "end point" is the start point of the line
float startX = centerX + cos(radians(angleInDegrees))*radius;
float startY = centerY + sin(radians(angleInDegrees))*radius;

//the second "end point" is the end point of the line
//notice that we're adding the angleIncrement to the angle to get the next point
float endX = centerX + cos(radians(angleInDegrees+angleIncrement))*radius;
float endY = centerY + sin(radians(angleInDegrees+angleIncrement))*radius;

//draw the line
line(startX, startY, endX, endY);

}
}

关于java - 了解加工过程中圆是如何形成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34713749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com