在整数[][]矩阵中圈出所选内容-Java

在整数[][]矩阵中圈出所选内容-Java,java,algorithm,math,image-processing,Java,Algorithm,Math,Image Processing,我有一个包含n列、n行的矩阵,每个元素都用0初始化 我要选择该矩阵中最大的圆,并将值设置为1 000010000 000111000 000111000 001111100 011111110 The drawing isnt't very artistic (or correct)... 001111100 matrix: 9*9 000111000 largest circle 000111000 000010000 你能帮我学习java算法吗 语言

我有一个包含n列、n行的矩阵,每个元素都用0初始化

我要选择该矩阵中最大的圆,并将值设置为1

000010000
000111000
000111000
001111100
011111110     The drawing isnt't very artistic (or correct)...  
001111100        matrix: 9*9
000111000        largest circle
000111000
000010000
你能帮我学习java算法吗

语言:Java

谢谢,,
Horatiu

找到圆边界适当像素的最有效方法是Bresenhamn算法或中点圆算法

这就是我如何改变它以适应你的:

public class Circle {
    private char[][] px;
    private char cEmpty='.';
    private char cFilled='#';
    public static void main(String[] args) {
        new Circle(15);
    }
    public Circle(int size)
    {
        px=new char[size][size];
        for(int i=0;i<size;i++)
            for(int j=0;j<size;j++)
                px[i][j]=cEmpty;
        calc(size/2,size/2,size/2-1);
        for(int i=0;i<size;i++){
            for(int j=0;j<size;j++)
                System.out.print(px[i][j]);
            System.out.println();
        }
    }

    public void calc(int cx, int cy, int radius)
    {
      int error = -radius;
      int x = radius;
      int y = 0;
      while (x >= y)
      {
        plot8points(cx, cy, x, y);   
        error += y;
        ++y;
        error += y;
        if (error >= 0)
        {
          --x;
          error -= x;
          error -= x;
        }
      }
    }

    void plot8points(int cx, int cy, int x, int y)
    {
      plot4points(cx, cy, x, y);
      if (x != y) plot4points(cx, cy, y, x);
    }
    void plot4points(int cx, int cy, int x, int y)
    {
      setPixel(cx + x, cy + y);
      if (x != 0) setPixel(cx - x, cy + y);
      if (y != 0) setPixel(cx + x, cy - y);
      if (x != 0 && y != 0) setPixel(cx - x, cy - y);
    }
    void setPixel(int x, int y){
        px[x][y]=cFilled;
    }
}
公共类圈子{
私有字符[][]px;
private char cEmpty=';
private char cFilled='#';
公共静态void main(字符串[]args){
新界(15);
}
公众圈(整数大小)
{
px=新字符[大小][大小];

对于(inti=0;i,这里有一个简单的算法。它将每个点填充为0或1,这取决于它是位于圆的内部还是外部

public static void main(String[] args)
{
    int[][] matrix = new int[9][];
    double midPoint = (matrix.length-1)/2.0;
    for (int col = 0; col < matrix.length; col++)
    {
        int[] row = new int[matrix.length];
        double yy = col-midPoint;
        for (int x=0; x<row.length; x++)
        {
           double xx = x-midPoint;
           if (Math.sqrt(xx*xx+yy*yy)<=midPoint)
             row[x] = 1;
           System.out.print(row[x]);
        }
        matrix[col] = row;
        System.out.println();
    }

}
publicstaticvoidmain(字符串[]args)
{
int[][]矩阵=新int[9][];
双中点=(矩阵长度-1)/2.0;
for(int col=0;col对于(int x=0;xI我只是想知道,这是家庭作业吗?这家伙要求人们给他一个算法?到底是什么?在这个网站上,如果你发布代码,你会得到答案。你找不到为你编写代码的人。想出你自己的想法,尝试一下,在这里发布出了什么问题,我们会很乐意提供帮助。我用它来消除红眼ol;如果我有一个想法怎么做,我现在就想做了;我说这幅画没有那么艺术,但我想要一个圆;是的,我想要算法——甚至是一个链接或任何有帮助的东西。还有问题吗?我不认为这应该以“不是真正的问题”来结束,因为这里所问的问题非常清楚……只是提问者没有表现出他在解决问题上的个人努力。因此,要么投反对票,要么不回答,要么让他展示自己的工作,要么让他指出答案,但不要投票结束(当然,除非这是一个骗局,在这种情况下,请投反对票!)。谢谢您的时间。但我选择了mdma的实现,因为他的圈子已经满了。谢谢,它工作得很好