2017-02-06 31 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; 
    } 
} 

Я пытаюсь создать метод, который использует простой графический интерфейс, который рисует. Метод, как он выше, рисует координаты простого круга с радиусом 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

Это привлекает все круги, так что фактически создает трубку.