当前位置: 首页 > 知识库问答 >
问题:

利用Java绘制由圆组成的分形图案

巫坚白
2023-03-14

我上星期一直在做这个项目,想不出该怎么解决它。我觉得自己离我很近,却无法发现自己的错误!我的作业要求我使用Java图形类沿着一条假想的线画圆。在中心画一个半径为n的圆。然后画出两个endpoint与圆的左右弧相交的半径为n/2的圆。

我已经能够在第一个圆圈的左右画出两个圆圈的第二步了。然而,我的程序应该然后递归地画出四个相同大小的圆。一个圆圈位于左圆圈的左右两侧,一个圆圈位于右圆圈的左右两侧。我的代码有可疑之处。

如有任何帮助,将不胜感激。

 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 x1,x2,y1,y2; //future x and y coordinates
    int radius=125; //radius of first circle
    int xMid=250, yMid=250; //center point (x,y) of circle

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

    //draw first circle
    graphics.drawOval(xMid-radius,yMid-radius,radius*2,radius*2);


    //run fractal algorithm to draw 2 circles to the left and right
   drawCircles(graphics, xMid, yMid, radius);

}

void drawCircles (Graphics graphics, int xMid, int yMid, int radius)
{
    //used to position left and right circles
    int x1 = xMid-radius-(radius/2);
    int y1 = yMid-(radius/2);
    int x2 = xMid+radius-(radius/2);
    int y2= yMid-(radius/2);

    if (radius > 5)
    {
         //draw circle to the left
    graphics.drawOval(x1, y1, (radius/2)*2, (radius/2)*2);

    //draw circle to the right
    graphics.drawOval(x2, y2, (radius/2)*2, (radius/2)*2);
    }

    drawCircles (graphics, xMid, yMid, radius/2);  
}

共有1个答案

鲁向明
2023-03-14

一些使用递归的改编版本...画出圆圈,然后通过再次调用相同的函数来画出它的2个子圈。

void drawCircles(Graphics graphics, int xMid, int yMid, int radius) {
    // end recursion
    if(radius < 5)
        return;

    // Draw circle
    graphics.drawOval(xMid - radius, yMid - radius, radius * 2, radius * 2);

    // start recursion
    //left
    drawCircles(graphics, xMid-radius, yMid, radius / 2);
    //right
    drawCircles(graphics, xMid+radius, yMid, radius / 2);
}
 类似资料:
  • 可以使用包的相应方法在图像上绘制各种形状,如圆形,矩形,线条,椭圆,多段线,凸起,多段线,多段线。 可以使用类的方法在图像上绘制一个圆形。 以下是这种方法的语法 - 该方法接受以下参数 - mat - Mat对象,表示要在其上绘制圆的图像。 point - 代表圆中心的对象。 radius - 表示圆的半径的整型变量。 scalar - 表示圆的颜色的标量对象(BGR)。 thickness -

  • 虽然HTML5的画布API未提供直接绘制圆形的方法,但我们一定可以通过绘制一个完全闭合的圆弧来创建这样一个方法。 图1-3 绘制圆弧 绘制步骤 按照以下步骤,在画布的中央绘制一个圆: 1. 定义2D画布上下文: window.onload  = function(){ var canvas  = document.getElementById("myCanvas"); var conte

  • 我只是试图用DrawOval()方法画圆,当我运行程序时,它只显示小正方形。我试图将构造函数添加到Surface类,但它不起作用。这是我制作的代码:

  • 主要内容:示例可以使用类的方法在图像上绘制椭圆形。 以下是这种方法的语法 - 该方法接受以下参数 - mat - 表示要在其上绘制矩形的图像的对象。 pt1 和 pt2 - 两个对象,表示要绘制的矩形的顶点。 color - 表示矩形颜色的标量对象(BGR)。 thickness - 表示矩形厚度的整数; 默认情况下,厚度值为。 类的构造函数接受类的对象,Size类的对象和double类型的变量,如下所示。 示

  • 本文向大家介绍php绘制圆形的方法,包括了php绘制圆形的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php绘制圆形的方法。分享给大家供大家参考。具体实现方法如下: php绘图的基本步骤,有四步(php.ini里的 extension = php_gb2.dll 组件首先需要启用) 1、创建画布; 2、画出所需要的图像(圆、直线、矩形、扇形、弧线.......); 3、输出到网页,

  • 本文向大家介绍canvas 绘制圆形时钟,包括了canvas 绘制圆形时钟的使用技巧和注意事项,需要的朋友参考一下 效果如下: 代码如下: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!