【发布时间】: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。好吧,从技术上讲,我正在尝试使用给定的一组坐标绘制任何四边形。在这里,我得到了两个,试图找出另外两个。你认为如果我尝试用循环制作钻石,那会适应一般情况吗?
-
哦...这有点复杂。你基本上是在做一个扫描线算法。我建议用谷歌搜索这个词。
-
请注意,您已经绘制了两个计算角。不过,我建议更刻意地这样做。事实上,我建议将所有四个角都绘制成一个练习,以便朝着大致正确的方向前进。