gpt4 book ai didi

java - 沿着螺旋线移动到中心,笛卡尔坐标在开始时给出

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:45 25 4
gpt4 key购买 nike

我想将椭圆沿螺旋移动到屏幕中心 - 椭圆的起点通过 x 和 y 坐标给出。好吧,我不知道如何将螺旋向中心插入(我可以通过将宽度/2 和高度/2 添加到 x,y 来实现这一点),同时在给定的笛卡尔 (x,y) 坐标处开始运动。下面是代码。帮助表示感谢!我一直在尝试在处理(java)中做到这一点:

float r = 0; //radius
float x = 700; // x of the object
float y = 50; // y of the object
float theta = 0; //angle

void setup() {
size(800,600);
background(0);
smooth();

r = sqrt(x*x+y*y); //polar coordinate - distance from x,y to 0,0 on the grid
theta = atan(y/x); // angle to 0,0 on the grid

}

void draw() {

fill(0,255,0);
rect(width/2,height/2,20,20);

fill(0,0,255);
rect(700,50,20,20);

float x = r * cos(theta);
float y = r * sin(theta);

// Draw an ellipse at x,y
noStroke();
fill(255,0,0);

ellipse(x, y, 16, 16);

if (r>0){
r -= 1; // Increment the radius
theta += 0.01; // Increment the angle
}
}

最佳答案

您可以平移 x,y,然后平移绘制循环。

这样您就可以使用 0,0 位于屏幕中心而不是屏幕左上角的坐标系。

您的距离和角度公式使用 0,0 作为原点,如果您使用左上角原点系统(如处理),则它不是屏幕的中心。您也可以修改这些公式。

下面的代码是您的编辑,使 0,0 位于屏幕中心。

float r = 0; //radius
float x = 100; // x of the object
float y = 100; // y of the object
float theta = 0; //angle

void setup() {
size(800,600);
background(0);
smooth();
ellipseMode(CENTER); // draw ellipses based on their center

// translate the x and y from top-left origin to center origin
x -= width/2;
y -= height/2;

r = sqrt(x*x+y*y); //polar coordinate - distance from x,y to 0,0 on the grid
theta = atan(y/x); // angle to 0,0 on the grid

}

void draw() {
translate(width/2, height/2); // translate the whole canvas

fill(0,255,0);
ellipse(0,0,20,20); // mark the center of the canvas

fill(0,0,255);
ellipse(x,y,20,20); // mark the start point for the circle

// flip the angle if left of the origin
int flip = 1;
if(x < 0) flip = -1;

float x = r * cos(theta) * flip;
float y = r * sin(theta) * flip;

// Draw an ellipse at x,y
noStroke();
fill(255,0,0);

ellipse(x, y, 16, 16);

if (r>0){
r -= 1; // Decrement the radius
theta += 0.01; // Increment the angle
}

}

下面的代码保留左上角原点,但修改半径和角度的初始化以相对于屏幕中心。

float x = 100; // x of the object
float y = 100; // y of the object
float r = 0; // radius
float theta = 0; // angle

void setup() {
size(800,600);
background(0);
smooth();
ellipseMode(CENTER); // draw ellipses based on their center

// distance between point and center of screen
r = dist(x,y,width/2,height/2);

// http://stackoverflow.com/a/7586218/1736092
// angle of line between point and center of screen
// relative to x-axis
float dX = x - width/2;
float dY = y - height/2;
theta = atan2(dY, dX);

stroke(0, 255, 0); // green stroke
line(x, y, width/2, height/2); // draw radius

noStroke();
fill(0, 255, 0); // green fill
ellipse(width/2, height/2, 20, 20); // mark the center of the canvas
fill(0, 0, 255); // blue fill
ellipse(x, y, 20, 20); // mark the start point for the circle
}

void draw() {
float x = r * cos(theta) + width/2;
float y = r * sin(theta) + height/2;

noStroke();
fill(255,0,0); // red fill
ellipse(x, y, 16, 16);

if(r>0) {
r -= 1; // Decrement the radius
theta += 0.01; // Increment the angle
}
}

关于java - 沿着螺旋线移动到中心,笛卡尔坐标在开始时给出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21078760/

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