0

好的,亲爱的伙计们,我有这个问题,我真的不知道解决它的特定方法。我在做java中的“绘画应用程序”,我知道一切都准备好了,但我需要用计算机图形算法来绘制形状。

所以,问题是,一旦在容器中绘制了形状,我怎么能像“对象”一样将它转换为能够选择形状并移动它(我必须用另一种算法移动它)我只是想要要知道我怎么知道在屏幕上单击的某个随机点属于一个对象,知道这一点,我将能够填充它(使用算法)。

我在想有一个点类和一个形状类,如果我点击屏幕,获取坐标并查看所有形状及其点,但这可能不是很有效。有什么想法吗?谢谢您的帮助。这是我的一些代码:

public class Windows extends JFrame{

private JPanel panel;
private JLabel etiqueta,etiqueta2;
public Windows() {
    initcomp();
}
public void initcomp()
{
    panel = new JPanel();
    panel.setBounds(50, 50, 300, 300);
    etiqueta = new JLabel("Circulo Trigonometrico");
    etiqueta.setBounds(20, 40, 200, 30);
    etiqueta2 = new JLabel("Circulo Bresenham");
    etiqueta2.setBounds(150, 110, 200, 30);

    panel.setLayout(null);
    panel.add(etiqueta);
    panel.add(etiqueta2);
    panel.setBackground(Color.gray);
this.add(panel);
    this.setLayout(null);
    this.setVisible(true);
    this.setSize(400,400);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void paint(Graphics g){
    super.paint(g);
       Graphics2D g2d = (Graphics2D) g;
       g2d.setColor(Color.red);
       g2d.setStroke(new BasicStroke(2));

       dibujarCirculo_bresenham(g2d, 50, 260, 260);
       dibujarCirculo_trigonometrico(g2d, 50, 130, 200);
}
/*This functions paints a Circle*/
public void dibujarCirculo_trigonometrico(Graphics g,int R,int xc,int yc)
{

      int x,y;
      for (int i = 0; i < 180; i++) {
        double angulo = Math.toRadians(i);
        x = (int) (Math.cos(angulo)*R);
        y = (int) (Math.sin(angulo)*R);
        g.drawLine(x+xc, y+yc, x+xc, y+yc);
        g.drawLine((-x+xc), (-y+yc), (-x+xc), (-y+yc));
    }
 }
4

2 回答 2

0

根据您的确切需求,有几种方法可以在这里采用。

1) 是有对象,屏幕上的每个绘制的东西都有一个对象,具有圆形、矩形和多边形等类。他们会定义诸如paint(如何在屏幕上绘制它们)、isCLickInsideOf(在此形状包含的屏幕上的这一点上的点击,给定大小/位置/等?)等方法。然后,重新绘制屏幕,​​绘制每个对象,并测试一个对象是否被点击,询问每个对象它的想法。

2) 是,如果对象具有颜色统一的属性,则当用户通过使用填充算法单击其中一个像素时,您可以抓取构成形状的所有像素。然后你可以将它们加载到某种数据结构中,在用户移动鼠标时移动它们,等等。此外,如果每个对象都保证具有唯一的颜色,你可以通过查看来测试哪个对象被点击在颜色。(像 OpenGL 之类的库有时会使用这样的技巧来确定您单击了哪个对象 - 将每个对象绘制为隐藏帧上的平面颜色并测试鼠标指针下的像素颜色是什么)

于 2013-05-29T05:27:26.577 回答
0

我假设任何图像都是有效的(不限于特定的一组形状)。要获得具有相似属性的连续区域,请尝试使用洪水填充

在此处输入图像描述

要为特定形状着色或移动特定形状,您可以使用泛色填充来确定像素集并相应地操作该集。您可以为相似的色调等设置容差,这样它就不像在画图中那样死板,而更像是 Photoshop 中的魔术选择工具。

于 2013-05-29T04:03:25.743 回答