在整数[][]矩阵中圈出所选内容-Java
我有一个包含n列、n行的矩阵,每个元素都用0初始化 我要选择该矩阵中最大的圆,并将值设置为1在整数[][]矩阵中圈出所选内容-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算法吗 语言
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的实现,因为他的圈子已经满了。谢谢,它工作得很好