2016-05-04 24 views
0

旋轉這是原帖的延續:陣列沿橢圓自己的中心點

Calculate ellipse size in relation to distance from center point

我試圖創建橢圓,一直以來自己的旋轉中心旋轉的網格。然後,我試圖通過中心點縮放橢圓的「正方形網格」,同時仍然允許它們沿着它們各自的中心點旋轉。

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); 
    } 
} 
+0

你的問題到底是什麼?這個更新後的代碼不符合你的期望? –

+0

我添加了錯誤的代碼,我附加了剛剛添加橢圓的正確部分。我認爲增加寬度/ 2和高度/ 2將允許將橢圓放置在兩個外部橢圓之間,但結果是完全不同的。這個問題或多或少與圖表有關,它詢問我如何在兩個外部橢圓之間添加橢圓,以及如何通過中心點縮放所有這些旋轉橢圓。謝謝 –

回答

0

我覺得你的問題有兩個部分。

第1部分:爲什麼你的觀點出現在哪裏?

你可以做的最好的事情就是弄出一張紙和一支鉛筆,並畫出一些要點。你的每個積分在哪裏出現?

處理正好把你的觀點,你要告訴它放了。這裏有一個例子:

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

你在哪裏期望展現出來?如果你的寬度和高度都是500,那麼width/2*.25將是62.5height/2*.75將是187.5。換句話說,這將在屏幕左上角的某個位置。

對你的每一個省略號做數學計算,你就會明白他們爲什麼要顯示它們的位置。

第2部分:如何計算兩點之間的中點?

這是一個比編程問題更重要的數學問題,並且使用類似「兩點之間的中點」的搜索方式返回大量結果。

但基本上,如果你有x1,y1x2,y2兩分,那麼你可以通過平均它們xy位置找到它們的中點:

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

我建議你通過第一部分數字工作確定你的分數應該在哪裏,然後用第二部分找出這些分數之間的中點。

+0

寫完所有內容後,位置變得更加清晰。謝謝 –