我正在尝试使椭圆变为中心,并且除了在平局中且x和y的偏移发生变化之外,我无法确定它如何移动。首先,我绘制了椭圆的初始x和y位置,然后尝试计算出它与中心的距离,我想知道你们中的任何一个是否可以帮助您,将不胜感激。 ^^(此处是初学者)[IDE处理]
我不知道从极坐标系到笛卡尔坐标系的革命是怎么回事。
Heart heart = new Heart();
int h = 500;
int w = 500;
void setup(){
size(500,500);
heart = new Heart();
heart.init();
//heart.display();
}
void draw(){
background(0);
heart.rotate();
}
class Heart {
float[][] pos;
float[] dist;
int hold;
float xOff;
float yOff;
Heart(){
hold = 10;
dist = new float[hold];
pos = new float[hold][hold];
}
void init(){
for(int i = 0; i < hold; i++){
for(int j = 0; j < hold; j++){
pos[i][j] = random(0,h);
}
}
}
/*void display(){
for (int k = 0; k < hold; k++){
fill(0,10,255,50);
ellipse(pos[k][0],pos[0][k],15,15);
stroke(255);
line(w/2,h/2,pos[k][0],pos[0][k]);
}
}*/
void rotate(){
float[] r = new float[hold];
int theta;
for(int k = 0; k < hold; k++){
r[k] = dist(w/2,h/2,pos[k][0],pos[0][k]);
for(theta = 0; theta <= TWO_PI; theta++){
xOff = r[k] * cos(theta);
yOff = r[k] * sin(theta);
stroke(255);
println(pos[k][0] + xOff);
ellipse(pos[k][0] + xOff,pos[0][k] + yOff,15,15);
}
}
}
}
我希望椭圆旋转,没有错误。
答案 0 :(得分:2)
使用类型为angle
的全局变量float
。在每帧中增加角度并将其传递给方法Heart.rotate()
:
float angle = 0.0;
void draw(){
background(0);
heart.rotate(angle);
angle += 0.01;
}
方法Heart.rotate()
不必每帧以一个特定的角度绘制ellipse
,而不是在每个帧中以循环的方式绘制所有可能的角度。
class Heart {
// ...
void rotate(float theta){
float[] r = new float[hold];
for(int k = 0; k < hold; k++){
r[k] = dist(w/2,h/2,pos[k][0],pos[0][k]);
xOff = r[k] * cos(theta);
yOff = r[k] * sin(theta);
stroke(255);
println(pos[k][0] + xOff);
ellipse(pos[k][0] + xOff,pos[0][k] + yOff,15,15);
}
}
}
注意,在执行全局draw()
之后,显示将更新一次。方法Heart.rotate()
的内部循环中没有显示的更新。