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

使用递归沿直线绘制圆

左丘边浩
2023-03-14

我试过尝试一下,到目前为止,我就是这么想的。我只试着画第一个圆圈,然后再画两个左右的圆圈。到目前为止,我还没有做任何递归。我只是试着在左边和右边画两个圆,它们的中心点与最大圆的左边和右边相碰撞。

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

任何帮助都将不胜感激。

共有1个答案

鞠嘉志
2023-03-14

我要给你一点小费。如果任务更简单,你更愿意从中心画圆,让我们做一个你想要的函数。

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

现在您有了一个函数,可以从您选择的中心点以您选择的半径创建圆。

耶!

 类似资料:
  • 在学习如何通过HTML5画布绘制图形时,大多数初学者都对绘制最基本的画布元素感兴趣。本节将通过绘制一条简单的直线,来展示如何通过画布绘制图形。 图1-1 绘制直线 绘制步骤 按照以下步骤绘制一条对角线: 1. 定义2D画布并设置线条样式: window.onload = function(){ // 通过ID获取DOM中canvas元素 var canvas = document.g

  • 本文向大家介绍C#使用GDI绘制直线的方法,包括了C#使用GDI绘制直线的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用GDI绘制直线的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 我想在HTML5画布/或SVG上执行以下操作: 有一个背景路径,将光标移过去并绘制(填充)背景路径 用户完成绘图后有回调函数 我的问题是,我不知道如何检查抽屉线是否遵循路径。 有人能给我解释一下如何做到这一点,或者给我一些建议吗? http://jsbin.com/reguyuxawo/edit?html,js,控制台,输出

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

  • numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。

  • 我正在尝试使用 marplot.lib 库在 Python 中绘制直方图;但是,我一直收到此错误:“属性错误:箱必须单调增加。 这是我目前的代码: 传入的参数是信息。“信息”是一个元组列表,可能如下所示: [(4, 0.7984031936127745), (5, 0.5988023952095809), (5, 0.8739076154806492), (5, 0.736454497632824