【问题标题】:Draw square in java without Java Graphics在没有Java图形的Java中绘制正方形
【发布时间】:2017-02-25 10:10:33
【问题描述】:

给定两个坐标,我们如何在画布上制作方形图案。

下面的函数应该在大小为 20x16 的画布上用给定坐标 (x1,y1), (x3,y3) 绘制一个正方形 -

public static void main(String[] args) {
    DrawMe(20, 16, 16, 14, 8, 14);        
}

    public static void DrawMe(int yaxis, int xaxis, int x1, int y1, int x3, int y3) { 
    int l=Math.abs(x3-x1); int l2=l/2;
    int x2=x1+l2; int y2=y1+l2;
    int x4=x1+l2; int y4=y1-l2;
    char [ ] [ ] canvas = new char [xaxis] [yaxis]; 
    for (int x = 0; x < xaxis; x++) { 
        for (int y = 0; y < yaxis; y++) { 

            if((y==x1 && x==y1) || (y==x2 && x==y2) || (y==x3 && x==y3) || (y==x4 && x==y4))
                //canvas[x][y]='#';
                System.out.print('#');

            else { 
                //canvas[x][y]='.'; 
                System.out.print('.');
            }                
        }  
        System.out.println();
    }/
}

但是,代码给了我这样的输出 -

....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
........#.......#...                                                                                                                                                                                 
....................

而我想要这样的东西 -

....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
....................                                                                                                                                                                                 
............#.......
..........#####.....
.........#######....
........#########...
.........#######....

我尝试了很多事情,但就是没有发生。有人可以帮我弄清楚吗?这将是一个很大的帮助!

如果这个问题看起来很愚蠢,请原谅。只是想弄清楚一些基础知识。提前谢谢你。

【问题讨论】:

  • 从技术上讲,您绘制的是菱形而不是正方形。我建议您从仅绘制钻石的顶部 # 开始。你能在正确的位置得到它吗?
  • 这是一个措辞非常好的问题。您提供了一个完整的代码示例,如果我愿意,我可以自己编译和运行,并且您提供实际输出和预期输出。我希望 Stack Overflow 的更多新成员能够如此彻底。
  • 谢谢你,@Code-Apprentice。好吧,从技术上讲,我正在尝试使用给定的一组坐标绘制任何四边形。在这里,我得到了两个,试图找出另外两个。你认为如果我尝试用循环制作钻石,那会适应一般情况吗?
  • 哦...这有点复杂。你基本上是在做一个扫描线算法。我建议用谷歌搜索这个词。
  • 请注意,您已经绘制了两个计算角。不过,我建议更刻意地这样做。事实上,我建议将所有四个角都绘制成一个练习,以便朝着大致正确的方向前进。

标签: java draw


【解决方案1】:

好的,由于我缺乏英语技能,我的答案不清楚。 我只是把我的源代码放在下面


public class Test {

public static void main(String[] args) {
    Test test= new Test();
    test.DrawMe(20, 16, 16, 14, 8, 14);        
}

/*
 * if you want to draw diamond from 2 points on same X-axis,
 * this is short solution that i think.
 * 
 * But you want to draw rectangle from 2 diagonal points on any location,
 * variables should be changed to float or double for calculating REAL NUMBER,
 * and then other math algorithm is needed.
 */

public void DrawMe(int xaxis, int yaxis, int x1, int y1, int x3, int y3) { 
    int length = Math.abs(x3-x1);
    int harfLength = length / 2; 

    int minX = (x1 > x3) ? x3 : x1;
    int maxX = (x1 > x3) ? x1 : x3;

    int minY = y1 - harfLength;

    for(int y = 0; y < yaxis+1; y++) {
        for(int x = 0; x < xaxis+1; x++) {
            if(x > minX+(Math.abs(y-minY)) && x < maxX-(Math.abs(y-minY))) {
                System.out.print('#');                  
            } else {
                System.out.print('.');
            }
        }
        System.out.println();
    }

}

}

这就是结果。

.....................
.....................
.....................
.....................
.....................
.....................
.....................
............#........
...........###.......
..........#####......
.........#######.....
..........#####......
...........###.......
............#........
.....................
.....................
.....................

【讨论】:

  • 由于OP是做文字图形的,所以int是正确的数据类型。
  • 我不认为文本图形与绘图图形不同。这有什么区别吗?
  • 你是对的。但是,您的原始答案并没有真正解决问题。您当前的答案有点过分,因为您基本上为他们做了 OP 作业。
  • @Code-Apprentice 我认为他想扫描线解决问题,所以我只是给他一个关于在这种情况下容易发生的数据类型错误的建议。但我缺乏语言技能可能会造成一些麻烦。
  • 是的,OP 在问题下方的评论听起来像是一个扫描线练习。我非常努力地原谅英语技能并专注于你的意思。有时这很困难。在这里回答问题是锻炼语言技能的好方法。
猜你喜欢
  • 1970-01-01
  • 2010-11-19
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
相关资源
最近更新 更多