这是原帖的延续:
Calculate ellipse size in relation to distance from center point
我正在尝试创建一个椭圆网格,它们都沿着自己的旋转中心旋转。然后,我正在尝试扩展#34; square grid"椭圆的中心点,同时仍允许它们沿着各自的中心点旋转。
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);
}
}
答案 0 :(得分:0)
我认为你的问题有两个部分。
第1部分:为什么您的积分显示在哪里?
你能做的最好的事情就是要弄清楚一张纸和一支铅笔,然后画出一些要点。你的每一点都会出现在哪里?
处理是将您的观点准确地放在您告诉它放置它们的位置。这是一个例子:
ellipses.add(new RotatingEllipse(width/2*.25, height/2*.75));
您希望它出现在哪里?如果您的宽度和高度均为500
,则width/2*.25
将为62.5
,height/2*.75
将为187.5
。换句话说,这将位于屏幕左上象限的某个位置。
对每个省略号进行数学计算,你就会明白为什么他们会出现在他们所在的位置。
第2部分:如何计算两点之间的中点?
这是一个数学问题,而不是一个编程问题,并在谷歌搜索类似于&#34;两点之间的中点&#34;返回了大量的结果。
但基本上,如果你在x1,y1
和x2,y2
有两个积分,那么你可以通过平均他们的x
和y
位置来找到他们的中点:
midpoint = (x1+x2)2, (y1+y2)/2
我建议你通过第一部分来确定你的分数应该在哪里,然后用第二部分来找到这些分数之间的中点。