沿自己的中心点旋转的椭圆阵列

时间:2016-05-04 17:36:24

标签: processing

这是原帖的延续:

Calculate ellipse size in relation to distance from center point

我正在尝试创建一个椭圆网格,它们都沿着自己的旋转中心旋转。然后,我正在尝试扩展#34; square grid"椭圆的中心点,同时仍允许它们沿着各自的中心点旋转。

Multiple ellipses + Scale by center

 
ArrayList<RotatingEllipse> ellipses = new ArrayList<RotatingEllipse>();


void setup() {
  size(500, 500);
  noStroke();
  smooth();

  ellipses.add(new RotatingEllipse(width*.25, height*.25));
  ellipses.add(new RotatingEllipse(width*.75, height*.75));

  ellipses.add(new RotatingEllipse(width*.75, height*.25));
  ellipses.add(new RotatingEllipse(width*.25, height*.75));

  ellipses.add(new RotatingEllipse(width/2*.25, height/2*.25));
  ellipses.add(new RotatingEllipse(width/2*.75, height/2*.75));

  ellipses.add(new RotatingEllipse(width/2*.75, height/2*.25));
  ellipses.add(new RotatingEllipse(width/2*.25, height/2*.75));
}

void draw() {
  background(#202020);

  for (RotatingEllipse e : ellipses) {
    e.stepAndDraw();
  }
}


class RotatingEllipse {

  float rotateAroundX;
  float rotateAroundY;
  float distanceFromRotatingPoint;
  float angle;

  public RotatingEllipse(float startX, float startY) {

    rotateAroundX = (width/2 + startX)/2;
    rotateAroundY = (height/2 + startY)/2;


    distanceFromRotatingPoint = dist(startX, startY, rotateAroundX,    rotateAroundY);

    angle = atan2(startY-height/2, startX-width/2);
  }

  public void stepAndDraw() {


    angle += PI/128;


    float x = rotateAroundX + cos(angle)*distanceFromRotatingPoint;
    float y = rotateAroundY + sin(angle)*distanceFromRotatingPoint;



    float distance = dist(x, y, width/2, height/2); 

// size of ellipses  
    float diameter = 50*(200-distance)/500;
   ellipse(x, y, diameter, diameter);
  }
}

1 个答案:

答案 0 :(得分:0)

我认为你的问题有两个部分。

第1部分:为什么您的积分显示在哪里?

你能做的最好的事情就是要弄清楚一张纸和一支铅笔,然后画出一些要点。你的每一点都会出现在哪里?

处理是将您的观点准确地放在您告诉它放置它们的位置。这是一个例子:

  
ellipses.add(new RotatingEllipse(width/2*.25, height/2*.75));

您希望它出现在哪里?如果您的宽度和高度均为500,则width/2*.25将为62.5height/2*.75将为187.5。换句话说,这将位于屏幕左上象限的某个位置。

对每个省略号进行数学计算,你就会明白为什么他们会出现在他们所在的位置。

第2部分:如何计算两点之间的中点?

这是一个数学问题,而不是一个编程问题,并在谷歌搜索类似于&#34;两点之间的中点&#34;返回了大量的结果。

但基本上,如果你在x1,y1x2,y2有两个积分,那么你可以通过平均他们的xy位置来找到他们的中点:

midpoint = (x1+x2)2, (y1+y2)/2

我建议你通过第一部分来确定你的分数应该在哪里,然后用第二部分来找到这些分数之间的中点。