gpt4 book ai didi

java - 逐行绘制矩形

转载 作者:行者123 更新时间:2023-12-01 23:32:31 25 4
gpt4 key购买 nike

我想在Java中通过hlinevline绘制矩形。我在绘制它时遇到了一些问题,我不太清楚,但我认为它是在 hline1vline1 方法中。

没有错误,只是参数内的算法有问题。

这是代码..

 package hw1;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

public class main extends Frame {

Graphics2D g2d;
main()
{
addWindowListener(new hw1.main.MyFinishWindow());
}

public class MyFinishWindow extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}

public void paint (Graphics g)
{
g2d=(Graphics2D)g;

hline(0,40,250,40);
vline(250,40 , 250 , 80);
hline1(250,80,0,80);
vline1(0,80 , 0 , 40);

}

public void hline(int x1,int y1 , int x2 , int y2)
{
for(int x=x1 ; x<=x2 ; x++)
putpixel(x,y1,Color.blue);
}

public void vline(int x1 ,int y1 , int x2 , int y2 )
{
for(int y=y1;y<=y2;y++)
putpixel(x1,y,Color.blue);
}

public void hline1(int x1,int y1 , int x2 , int y2)
{
for(int x=x1 ; x<=x2 ; x++)
putpixel(x,x1,Color.blue);
}

public void vline1(int x1 ,int y1 , int x2 , int y2 )
{
for(int y=y1;y<=y2;y++)
putpixel(x1,y,Color.blue);
}

public void putpixel(int x , int y , Color c)

{
g2d.setColor(c);
g2d.drawLine(x, y, x, y);
}

public void putpixel(int x , int y , Color c , int rad)
{
g2d.setColor(c);
if(rad>4) rad=4;
if(rad<=0) rad=1;
g2d.drawOval(x-rad/2, y-rad/2, rad, rad);
}


public static void main(String[] args) {
// TODO code application logic here

main f=new main();
f.setTitle("Computer Graphics:Java 2D prpgram");
Dimension screenSize=
Toolkit.getDefaultToolkit().getScreenSize();
int width=(int) screenSize.getWidth();
int height=(int) screenSize.getHeight();
f.setSize(width, height);
f.setVisible(true);
}

}

最佳答案

主要问题是您总是增加循环变量 - 而不考虑哪个边界值大于另一个......

   vline1(0,80 , 0 , 40);

这将从 80 开始 y,并递增直到达到 40...

这至少做了它应该做的事情

public void vline(int x1 ,int y1 , int x2 , int y2 )
{
//use min and max
for(int y=Math.min(y1, y2);y<=Math.max(y1,y2);y++) { //always use brackets!!!
putpixel(x1,y,Color.blue);
}
}

此外,请确保也为 hline() 实现此功能...

其他问题

  • 您不需要两个用于垂直线的函数,也不需要两个用于水平线的函数。方法的目的是重用代码 - 如果您想出于某种我们未知的原因保留此结构,请对水平线使用 1 个函数,对垂直线使用 1 个函数。
  • 方法中不应有任何未使用的参数。

    hline(y, x1, x2)
    vline(x, y1, y2)

    完全足够了。

  • 更不用说,将其提升到一个新的水平:如果有一种方法可以处理所有类型的线条,那就太好了:那就是 drawLine(),如 @ling.s 指出。这可以正确处理各种线条...

这个故事的寓意:了解你的 API,不要重新发明轮子(除非这是为了学校,学校的作业就是重新发明它......)

关于java - 逐行绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19113345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com