2014-02-06 4 views
0

Я пытаюсь нарисовать следующий рисунок фрактала кругов вдоль линии. Он рисует круг с радиусом n и центральную точку на невидимой линии. Затем он рекурсивно рисует два круга с радиусом n/2 и центральными точками на линии, где круги пересекают линию. Fractal Circles Это очень запутывает меня, так как графический код Java для рисования кругов требует использования «instance.drawOval (int x1, int x1, int height, int width), который ничего не говорит о центре круга.Рисование кругов вдоль линии с использованием рекурсии и фракталов - Java

Я попытался нанести удар, и это то, к чему я придумал. Я только попытался нарисовать первый круг, а затем два вправо и влево. Я не сделал ни одного из рекурсия до сих пор. Я просто пытаюсь нарисовать два круга слева и справа, центр точки столкновения с левой и правой части самого большого круга.

package fractalcircles; 

import java.awt.*; 
import javax.swing.*; 

public class FractalCircles { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) 
{ //create a MyCanvas object 
    MyCanvas canvas1 = new MyCanvas(); 

    //set up a JFrame to hold the canvas 
    JFrame frame = new JFrame(); 
    frame.setTitle("FractalCircles.java"); 
    frame.setSize(500,500); 
    frame.setLocation(100,100); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //add the canvas to the frame as a content panel 
    frame.getContentPane().add(canvas1); 
    frame.setVisible(true); 
}//end main 
}//end class 

class MyCanvas extends Canvas 
{ 
public MyCanvas() 
{} //end MyCanvas() constructor 

//this method will draw the initial circle and invisible line 
public void paint (Graphics graphics) 
{ 
    int n=50; //radius of first circle 

    //draw invisible line 
    graphics.drawLine(0,250,500,250); 

    //draw first circle 
    graphics.drawOval(200,200,n*2,n*2); 

    //run fractal algorith to draw 2 circles to the left and right 
    drawCircles(graphics, n); 
} 

public void drawCircles (Graphics graphics, int n) 
{ 
    int x1; int y1; //top left corner of left circle to be drawn 
    int x2; int y2; //top left corner of right circle to be drawn 

    //drawing left circle 
    x1=200-((n/2)*2); 
    //***this math was found using the equation in chapter 11 
    //***center point of circle = (x+(width/2), y+(height/2)) 
    y1=200-((n/2)*2); 
    graphics.drawOval(x1, y1, ((n/2)*2), ((n/2)*2)); 

    //drawing right circle 
    x2=300-((n/2)*2); 
    y2=300-((n/2)*2); 
    graphics.drawOval(x1, y1, ((n/2)*2), ((n/2)*2)); 
} 

Любая помощь Wou ld будем очень благодарны ребятам.

ответ

2

Я собираюсь бросить немного подсказки. Если задача будет проще, и вы предпочтете рисовать круги из центра, сделайте функцию, которая будет работать так, как вы хотите.

public void circle(Graphics g, int centerX, int centerY, int radius) { 
    g.drawOval(centerX-radius, centerY-radius, radius*2+1, radius*2+1) 
} 

Теперь у вас есть функция, которая может создавать круги из центральной точки по вашему выбору с радиусом по вашему выбору.

Yay!

Смежные вопросы