2017-02-06 106 views
1
public static void drawSpiral(Display panel) { 
    int centerX = panel.getWidth()/2; 
    int centerY = panel.getHeight()/2; 

    double degAng = 270; 
    double radius = 150; 
    double x, y, radAng; 
    while (true) { 

     radAng = (degAng * Math.PI)/180; 
     x = centerX + radius * Math.cos (radAng); 
     y = centerY + radius * Math.sin (radAng); 

     panel.drawNextPoint ((int) x, (int) y); 
     degAng += 0.45; 
    } 
} 

我想創建一個使用簡單的GUI繪製的方法。上面的方法繪製了從頂部開始的半徑爲150的簡單圓的座標。我試圖畫出一個使用該方法給出的點作爲中心點的圓。如何找到圍繞另一個圓的圓周旋轉的圓的圓周座標?

這是我最近試過的,它只給了我一個橢圓!

public static void drawCircle(Display panel) { 
    int centerX = panel.getWidth()/2; 
    int centerY = panel.getHeight()/2; 

    double degAng = 270; 
    double newDegAng = 0; 
    double newRadius = 25; 
    double radius = 150; 
    double x, y, radAng, newX, newY, newRadAng; 
    while (true) { 

     radAng = (degAng * Math.PI)/180; 
     x = centerX + radius * Math.cos (radAng); 
     y = centerY + radius * Math.sin (radAng); 

     newRadAng = (newDegAng * Math.PI)/180; 
     newX = x - newRadius * Math.cos (newRadAng); 
     newY = y - newRadius * Math.sin (newRadAng); 

     panel.drawNextPoint ((int) newX, (int) newY); 
     degAng += 0.45; 
     newDegAng -= 0.45; 
    } 
} 

回答

1

在到達下一個點之前,您需要先運行您的圓來消耗。所以,你需要一個嵌套的循環:

double degAng = 0; 
double newDegAng = 0; 
double newRadius = 25; 
double radius = 150; 
double x, y, radAng, newX, newY, newRadAng; 
while (degAng<360) { 
    radAng = (degAng * Math.PI)/180; 
    x = centerX + radius * Math.cos (radAng); 
    y = centerY + radius * Math.sin (radAng); 

    newDegAng = 0; 
    while (newDegAng>-360) { 
     newRadAng = (newDegAng * Math.PI)/180; 
     newX = x - newRadius * Math.cos (newRadAng); 
     newY = y - newRadius * Math.sin (newRadAng); 
     drawPoint ((int) newX, (int) newY); 
     newDegAng -= 0.45; 
    } 

    drawPoint((int) x, (int) y); 
    degAng += 0.45; 
} 

這將創建一個漂亮的圖片這樣

enter image description here

這吸引各界所以它有效地創建一個管。