旋转椭圆路径中的一些元素

时间:2012-02-06 04:57:00

标签: processing ellipse

我试图制作一些物体,比如12,在Processing中连续旋转椭圆形路径。我得到了一个圆形旋转的草图,我想让它以椭圆形旋转。我有一些来自处理论坛的指针,但是指针中的代码与我发布的代码不同,我还无法理解(三角函数较弱)。

我google了一下,发现了一篇试图用这个算法实现这个目标的帖子:

  

您需要使用几个参数定义椭圆:

x, y: center of the ellipse
a, b: semimajor and semiminor axes
     

如果你想要移动elipses,这意味着你改变了   主轴和椭圆上的位置之间的角度。让我们   称这个角度为alpha。

     

你的位置(X,Y)是:

X = x + (a * Math.cos(alpha));
Y = y + (b * Math.sin(alpha));
     

为了向左或向右移动,你需要增加/减少alpha和   然后重新计算你的位置。资源:   http://answers.unity3d.com/questions/27620/move-object-allong-an-ellipsoid-path.html

如何将其整合到草图中?谢谢。

这是我的草图:

void setup()
{
    size(1024, 768);
    textFont(createFont("Arial", 30));
}

void draw()
{
    background(0);
    stroke(255);

    int cx = 500;
    int cy = 350;
    int r = 300; //radius of the circle
    float t = millis()/4000.0f; //increase to slow down the movement

    ellipse(cx, cy, 5, 5);

    for (int i = 1 ; i <= 12; i++) {
        t = t + 100;
        int x = (int)(cx + r * cos(t));
        int y = (int)(cy + r * sin(t));

        line(cx, cy, x, y);
        textSize(30);
        text(i, x, y);

        if (i == 10) {
            textSize(15);
            text("x: " + x + " y: " + y, x - 50, y - 20);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

替换

int r = 300; //radius of the circle

int a = 350; // major axis of ellipse
int b = 250; // minor axis of ellipse

并替换

int x = (int)(cx + r * cos(t));
int y = (int)(cy + r * sin(t));

int x = (int)(cx + a * cos(t));
int y = (int)(cy + b * sin(t));